¿Se necesita el tipo de embalaje 'POM' cuando no se usa la agregación del proyecto (multimódico)?
-
25-09-2019 - |
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?
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.