2016-09-13 1 views
0

Mon Parent POMComment créer des assemblages avec des dépendances transitifs dans Maven projet multi-modules

<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 du module 1 et le module 2 sont trivial (avec des scripts de démarrage dans l'emplacement par défaut). Ci-dessous POM du module de distribution,

<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> 

Voici assembly.xml dans le module de distribution

<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> 

Tout est OK, mais les résultats "du paquet mvn clean" dans

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 

La seule chose que je veux est de mettre les dépendances transitives de module1 dans test.distribution.module1/lib fo lder et même pour le module 2.

Une autre chose est, je veux savoir quand utiliser un ensemble de modules sur un ensemble de dépendances.

J'apprécierais tout conseil de bonne pratique concernant la structure de mon projet ou quoi que ce soit.

Répondre

0

Trouvé un moyen d'atteindre ce but, mais ne sais pas si c'est l'option privilégiée ou non.

j'ai ajouté l'extrait ci-dessous POM parent

<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> 

Il copie les dépendances de transitifs de tous les modules dans son propre répertoire cible/lib. Puis j'ai ajouté l'extrait de Beow dans l'assembly.xml 'chaque ensemble de modules

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