¿Se necesita el tipo de embalaje 'POM' cuando no se usa la agregación del proyecto (multimódico)?

StackOverflow https://stackoverflow.com/questions/2193789

Pregunta

Quiero heredar las dependencias de un (padre) pom.xml en un proyecto infantil en Maven 2.2.1; es decir, utilice la herencia del proyecto. Parece que es necesario cambiar el tipo de empaque predeterminado desde jar a pom en este caso.

Sin embargo, no la documentación Maven2 Indique que el tipo de embalaje pom ¿Es necesario para la agregación de proyectos, es decir, proyectos multimólicos que usan submódulos, pero no para la herencia del proyecto?

<project>
 <modelVersion>4.0.0</modelVersion>
 <groupId>example</groupId>
 <artifactId>example-parent</artifactId>
 <version>1</version>

 <dependencies>
   <dependency>
     <groupId>log4j</groupId>
     <artifactId>log4j</artifactId>
     <version>1.2.14</version>
   </dependency>
 </dependencies>
</project>

<project>     
 <parent>
   <groupId>example</groupId>
   <artifactId>example-parent</artifactId>
   <version>1</version>
 </parent>

 <modelVersion>4.0.0</modelVersion>
 <groupId>example</groupId> 
 <artifactId>example-child</artifactId>
</project>

Pero si llamas a Maven (por ejemplo mvn clean) Con la configuración anterior, obtienes un error:

Project ID: example:example-child

Reason: Parent: example:example-parent:jar:1 
 of project: example:example-child has wrong packaging: jar.
Must be 'pom'. for project example:example-child

Por otro lado, con la siguiente entrada:

<project> 
 ... 
 <packaging>pom</packaging>
 ... 
</project>

en el padre pom.xml, Maven se puede ejecutar sin ningún error.

¿Es correcto este comportamiento de Maven?

¿Fue útil?

Solución

Como se documenta en el Herencia Sección de la Referencia de POM:

El tipo de embalaje requerido para ser pom por padre y agregación (Multi-módulos) Proyectos.

Entonces, el comportamiento de Maven me parece correcto (y el mensaje de error es muy autoplicante).

Otros consejos

Si solo desea heredar dependencias, entonces no creo que deba ser tipo 'pom'. Puede tenerlo jar y simplemente especificarlo como una dependencia del proyecto que tiene como niño. Sin embargo, no tendría la relación padre/hijo, que es lo que evita que su proyecto principal sea un tipo que no sea 'POM'.

Para ser claros, heredas las dependencias de todas sus dependencias (dependencias transitivas).

Como señaló Pascal, el comportamiento es correcto.

Si todavía está buscando medios para compartir dependencias entre módulos, puede considerar agrupar las dependencias en cuestión en una POM, y luego tener sus módulos dependen de esa nueva POM de "dependencias".

Ver Maven Libro Sección 3.6.1 para más detalles.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top