Tengo un proyecto de varios módulos en Maven que se compila correctamente, pero no se empaqueta correctamente.Cómo empaquetar proyectos maven de múltiples módulos con módulos anidados
En el experto principal pom.xml
, que incluyen los módulos de este tipo:
<modules>
<module>module1</module>
<module>module1/test</module>
<module>module2</module>
<module>module2/test</module>
...
<module>moduleN</module>
<module>moduleN/test</module>
</modules>
A diferencia de las convenciones de Maven, este proyecto tiene que tener sus árboles de fuentes de prueba recopilados como módulos separados, debido a las dependencias de compilación para la prueba el código difiere de las dependencias del código fuente principal. Entonces, la solución es configurar todos los módulos de prueba para que dependan de los módulos fuente principales para garantizar que se compilan en el orden correcto.
La estructura de directorios para este proyecto es muy no estándar. He colocado los pom.xml en lugares donde creo que pertenecen. Aunque no puedo cambiar esta estructura de directorios, está fuera de mi control. Es así:
/
+- pom.xml
+- module1/
+- pom.xml
+- src/
+- com/
+- company/
+- Module1.java
+- test/
+- pom.xml
+- src/
+- com/
+- company/
+- Module1Test.java
...
Aquí se muestra el pom.xml para un módulo de fuente regular. Esto funciona perfectamente:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.company</groupId>
<artifactId>project</artifactId>
<version>5.3.1-SNAPSHOT</version>
</parent>
<artifactId>module1</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.company</groupId>
<artifactId>modulex</artifactId>
<version>${product.version}-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<sourceDirectory>src</sourceDirectory>
<directory>target</directory>
<outputDirectory>target/classes</outputDirectory>
<testOutputDirectory>target/test-classes</testOutputDirectory>
...
</build>
</project>
Aquí es el pom.xml para un módulo de prueba:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.company</groupId>
<artifactId>project</artifactId>
<version>5.3.1-SNAPSHOT</version>
<!-- I was forced to do this because this module was 2 levels deep -->
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>module1.test</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.company</groupId>
<artifactId>module1</artifactId>
<version>${product.version}-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<sourceDirectory>src</sourceDirectory>
<testSourceDirectory>src</testSourceDirectory>
<directory>target</directory>
<outputDirectory>target/classes</outputDirectory>
<testOutputDirectory>target/test-classes</testOutputDirectory>
...
</build>
</project>
Sin embargo, ya que el módulo de prueba es un subdirectorio del módulo principal, que estoy recibiendo el siguiente errores una vez que se trata de empaquetar module.test:
[ERROR] Failed to execute goal on project module1.test: Could not resolve dependencies for project com.company:module1.test:jar:5.3.1-
SNAPSHOT: Could not find artifact com.company:module1:jar:5.3.1-SNAPSHOT in repo1.maven.org (http://repo1.maven.org/maven2/) -> [Help 1]
Por alguna razón, Maven piensa que necesita para traer este frasco de un repositorio, a pesar de que acaba de construir previamente ....
¿Debo mover el pom.xml en module1/test a un nivel principal como los demás? ¿Cómo puedo solucionar esto sin mover el pom.xml?
Gracias
¿Por qué no puedes cambiar la estructura del directorio? Esto causará mucho dolor con Maven. Es más fácil cambiar la estructura al diseño de carpeta predeterminado de Maven. – khmarbaise
¿Está seguro de que estos 2 módulos están construidos dentro del mismo reactor o 'com.company: module1: jar: 5.3.1-SNAPSHOT' está instalado en el repositorio local? –
Ejecuté su instalación y no tuve problemas. Por otro lado, no sé exactamente cómo es tu padre padre. ¿Podrías publicar ese también? – maba