2016-09-13 7 views
0

Мой родительский POMКак создавать сборки с зависимостями переходными в Maven проекта мульти-модуль

<modules> 
    <module>test.distribution.module1</module> 
    <module>test.distribution.module2</module> 
    <module>test.distribution.dist</module> 
</modules> 
... 
... 
<pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <version>2.6</version> 
       <configuration> 
        <descriptors> 
         <descriptor>src/main/assembly/assembly.xml</descriptor> 
        </descriptors> 
       </configuration> 
       <executions> 
        <execution> 
         <id>create-distribution</id> 
         <phase>package</phase> 
         <goals> 
          <goal>single</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </pluginManagement> 

POM модуля 1 и модуля 2 тривиальны (со стартовыми скриптами в папку по умолчанию). Ниже POM модуля распределения,

<dependencies> 
    <dependency> 
     <groupId>com.abhishek</groupId> 
     <artifactId>test.distribution.module1</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
    </dependency> 
    <dependency> 
     <groupId>com.abhishek</groupId> 
     <artifactId>test.distribution.module2</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
    </dependency> 
</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-assembly-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 

Здесь assembly.xml модуль распределения

<assembly 
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd"> 
<id>bin</id> 
<!-- Specifies that our binary distribution is a zip package --> 
<formats> 
    <format>zip</format> 
</formats> 

<moduleSets> 
    <moduleSet> 
     <useAllReactorProjects>true</useAllReactorProjects> 
     <includes> 
      <include>com.abhishek:test.distribution.module1</include> 
     </includes> 
     <sources> 
      <fileSets> 
       <fileSet> 
        <directory>${project.build.scriptSourceDirectory}</directory> 
        <outputDirectory></outputDirectory> 
       </fileSet> 
       <fileSet> 
        <directory>${project.basedir}</directory> 
        <outputDirectory>/</outputDirectory> 
        <includes> 
         <include>README*</include> 
         <include>LICENSE*</include> 
         <include>NOTICE*</include> 
        </includes> 
       </fileSet> 
       <fileSet> 
        <directory>${project.build.directory}</directory> 
        <outputDirectory>lib</outputDirectory> 
        <includes> 
         <include>*.jar</include> 
        </includes> 
       </fileSet> 
       <fileSet> 
        <directory>${project.build.directory}/site</directory> 
        <outputDirectory>docs</outputDirectory> 
       </fileSet> 
      </fileSets> 
     </sources> 
    </moduleSet> 
    <moduleSet> 
     <useAllReactorProjects>true</useAllReactorProjects> 
     <includes> 
      <include>com.abhishek:test.distribution.module2</include> 
     </includes> 
     <sources> 
      <fileSets> 
       <fileSet> 
        <directory>${project.build.scriptSourceDirectory}</directory> 
        <outputDirectory></outputDirectory> 
       </fileSet> 
       <fileSet> 
        <directory>${project.basedir}</directory> 
        <outputDirectory>/</outputDirectory> 
        <includes> 
         <include>README*</include> 
         <include>LICENSE*</include> 
         <include>NOTICE*</include> 
        </includes> 
       </fileSet> 
       <fileSet> 
        <directory>${project.build.directory}</directory> 
        <outputDirectory>lib</outputDirectory> 
        <includes> 
         <include>*.jar</include> 
        </includes> 
       </fileSet> 
       <fileSet> 
        <directory>${project.build.directory}/site</directory> 
        <outputDirectory>docs</outputDirectory> 
       </fileSet> 
      </fileSets> 
     </sources> 
    </moduleSet> 
</moduleSets> 

Все хорошо здесь, но "МВН чистый пакет" приводит

test.distribution.dist-0.0.1-SNAPSHOT-bin.zip 
--test.distribution.dist-0.0.1-SNAPSHOT-bin 
    --test.distribution.module1 
    --lib 
     --module1.jar 
    --start.bat 
    --test.distribution.module2 
    --lib 
     --module2.jar 
    --start.bat 

Единственное, что я хочу, это поставить транзитивные зависимости модуля1 в test.distribution.module1/lib fo lder и то же самое для модуля 2.

Другое дело, я хочу знать, когда использовать набор модулей над dependencyset в сборке.

Я бы посоветовал вам посоветоваться с рекомендациями относительно структуры проекта myy или чего-либо еще.

ответ

0

Найден способ достижения этого, но не знаю, является ли это опцией prefferred или нет.

Я добавил ниже фрагмент кода в родительском ПОМ

<plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.10</version> 
      <executions> 
       <execution> 
        <id>copy-dependencies</id> 
        <phase>package</phase> 
        <goals> 
         <goal>copy-dependencies</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>${project.build.directory}/lib</outputDirectory> 
         <overWriteReleases>false</overWriteReleases> 
         <overWriteSnapshots>false</overWriteSnapshots> 
         <overWriteIfNewer>true</overWriteIfNewer> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

Он копирует транзитивные зависимостей каждого модуля в свой собственный целевой каталог/Lib. Затем я добавил фрагмент в сборку. Xml 'каждый модуль

<fileSet> 
        <directory>${project.build.directory}/lib</directory> 
        <outputDirectory>lib</outputDirectory> 
        <includes> 
         <include>*.jar</include> 
        </includes> 
       </fileSet>