Uso el complemento de ensamblaje de Maven para crear un ensamblaje para mi proyecto de varios módulos. Hay dos aplicaciones separadas creadas a partir de este proyecto de varios módulos, cada una con un conjunto separado de dependencias. Hice un descriptor de ensamblaje personalizado que ensambla dos directorios (para cada aplicación) con compilaciones de módulos y sus respectivas dependencias. Hace todo bien, pero una cosa: pone las dependencias de ambos módulos en el conjunto del otro.Administración de dependencias de varios módulos con el complemento de ensamblaje de Maven
La siguiente es una versión simplificada de mi proyecto, que tiene exactamente el mismo comportamiento.
Considérese un proyecto que consta de dos módulos y un módulo de montaje: dependencias
APP
module1
module2
assembly
he añadido puramente para la demostración:
com.test.app:module1:jar:1.0
\- commons-cli:commons-cli:jar:1.2:compile
com.test.app:module2:jar:1.0
\- commons-daemon:commons-daemon:jar:1.0.8:compile
Aquí está el POM padres:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>app</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<modules>
<module>module1</module>
<module>module2</module>
<module>assembly</module>
</modules>
</project>
module1 POM:
<project>
<parent>
<groupId>com.test</groupId>
<artifactId>app</artifactId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.test.app</groupId>
<artifactId>module1</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
</project>
modulo2 POM:
<project>
<parent>
<groupId>com.test</groupId>
<artifactId>app</artifactId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.test.app</groupId>
<artifactId>module2</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>commons-daemon</groupId>
<artifactId>commons-daemon</artifactId>
<version>1.0.8</version>
</dependency>
</dependencies>
</project>
montaje POM:
<project>
<parent>
<groupId>com.test</groupId>
<artifactId>app</artifactId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.test.app</groupId>
<artifactId>assembly</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.2</version>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/main/assembly/descriptor.xml</descriptor>
</descriptors>
</configuration>
</plugin>
</plugins>
</build>
</project>
Y, por último, el descriptor de montaje:
<assembly>
<id>distribution</id>
<includeBaseDirectory>false</includeBaseDirectory>
<formats>
<format>dir</format>
</formats>
<moduleSets>
<moduleSet>
<useAllReactorProjects>true</useAllReactorProjects>
<includes>
<include>com.test.app:module1:jar</include>
</includes>
<binaries>
<outputDirectory>module1</outputDirectory>
<unpack>false</unpack>
<dependencySets>
<dependencySet>
<unpack>false</unpack>
</dependencySet>
</dependencySets>
</binaries>
</moduleSet>
<moduleSet>
<useAllReactorProjects>true</useAllReactorProjects>
<includes>
<include>com.test.app:module2:jar</include>
</includes>
<binaries>
<outputDirectory>module2</outputDirectory>
<unpack>false</unpack>
<dependencySets>
<dependencySet>
<unpack>false</unpack>
</dependencySet>
</dependencySets>
</binaries>
</moduleSet>
</moduleSets>
</assembly>
Como se puede ver, el montaje se unen para empaquetar fase . Así que, cuando yo haga
mvn package
del directorio padre, tengo el siguiente montaje
module1/
commons-cli-1.2.jar
commons-daemon-1.0.8.jar
module1-1.0.jar
module2/
commons-cli-1.2.jar
commons-daemon-1.0.8.jar
module2-1.0.jar
Básicamente, el problema aquí es que el módulo 1 no depende de los Comunes-daemon, pero el plugin de montaje ha incluido la dependencia. Del mismo modo, con module2 y commons-cli.
¿Alguien puede explicar por qué el plugin de ensamblaje se comporta de esta manera?
¿Cuál sería una solución?
No esperaría este comportamiento extraño de 'maven-assembly-plugin' ... ¿Está seguro de que no hay dependencias empujadas a su proyecto de ensamblaje desde el elemento primario? Muéstranos el árbol de dependencias generado para el proyecto de ensamblaje. –
El árbol de dependencias para el módulo de ensamblaje está obviamente vacío, ya que su POM no tiene declaraciones de dependencia. – sertsy