inheritance - descargar - maven repository
Herencia de la versión del proyecto Maven: ¿tengo que especificar la versión principal? (6)
Tengo dos proyectos: Proyecto principal: A, proyecto secundario: B
A / pom.xml:
<groupId>com.dummy.bla</groupId>
<artifactId>parent</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>pom</packaging>
Y en B / pom.xml, tengo:
<parent>
<groupId>com.dummy.bla</groupId>
<artifactId>parent</artifactId>
<version>0.1-SNAPSHOT</version>
</parent>
<groupId>com.dummy.bla.sub</groupId>
<artifactId>kid</artifactId>
Quiero que B herede la versión del padre, por lo que el único lugar en mi caso que necesito poner 0.1-SNAPSHOT
es A/pom.xml
. Pero si elimino la <version>0.1-SNAPSHOT</version>
de B/pom.xml
en la sección padre, maven se queja de la versión faltante para el padre.
¿Hay alguna manera en que pueda usar ${project.version}
o algo así para evitar tener 01.-SNAPSHOT
en ambas poms?
Como Yanflea mencionó, hay una manera de evitar esto.
En Maven 3.5.0 puede usar la siguiente forma de transferir la versión desde el proyecto principal:
Parent POM.xml
<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mydomain</groupId>
<artifactId>myprojectparent</artifactId>
<packaging>pom</packaging>
<version>${myversion}</version>
<name>MyProjectParent</name>
<properties>
<myversion>0.1-SNAPSHOT</myversion>
</properties>
<modules>
<module>modulefolder</module>
</modules>
...
</project>
Módulo POM.xml
<project ...>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.mydomain</groupId>
<artifactId>myprojectmodule</artifactId>
<version>${myversion}</version> <!-- This still needs to be set, but you can use properties from parent -->
</parent>
<groupId>se.car_o_liner</groupId>
<artifactId>vinno</artifactId>
<packaging>war</packaging>
<name>Vinno</name>
<!-- Note that there''s no version specified; it''s inherited from parent -->
...
</project>
Usted es libre de cambiar myversion
a lo que quiera que no sea una propiedad reservada.
La forma más fácil de actualizar las versiones de IMO:
$ mvn versions:set -DgenerateBackupPoms=false
(hazlo en tu carpeta pom raíz / principal).
Sus POM se analizan y se le pregunta qué versión establecer.
La respuesta de eFox funcionó para un solo proyecto, pero no cuando hacía referencia a un módulo desde otro (el pom.xml todavía estaba almacenado en mi .m2
con la propiedad en lugar de la versión).
Sin embargo, funciona si lo combina con el flatten-maven-plugin
, ya que genera los poms con la versión correcta, no con la propiedad.
La única opción que outputDirectory
en la definición del outputDirectory
es el outputDirectory
, está vacío de forma predeterminada, pero prefiero que esté en el target
, que está configurado en mi configuración de .gitignore
:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>1.0.1</version>
<configuration>
<updatePomFile>true</updatePomFile>
<outputDirectory>target</outputDirectory>
</configuration>
<executions>
<execution>
<id>flatten</id>
<phase>process-resources</phase>
<goals>
<goal>flatten</goal>
</goals>
</execution>
</executions>
</plugin>
La configuración del complemento va en el pom.xml principal
Maven no está diseñado para funcionar de esa manera, pero existe una solución alternativa para lograr este objetivo (tal vez con efectos secundarios, tendrá que intentarlo). El truco consiste en decirle al proyecto hijo que busque su padre a través de su ruta relativa en lugar de sus coordenadas maven puras, y además de externalizar el número de versión en una propiedad:
Parent pom
<groupId>com.dummy.bla</groupId>
<artifactId>parent</artifactId>
<version>${global.version}</version>
<packaging>pom</packaging>
<properties>
<!-- Unique entry point for version number management -->
<global.version>0.1-SNAPSHOT</global.version>
</properties>
POM de niño
<parent>
<groupId>com.dummy.bla</groupId>
<artifactId>parent</artifactId>
<version>${global.version}</version>
<relativePath>..</relativePath>
</parent>
<groupId>com.dummy.bla.sub</groupId>
<artifactId>kid</artifactId>
Utilicé ese truco por un tiempo para uno de mis proyectos, sin ningún problema específico, excepto el hecho de que Maven registra muchas advertencias al comienzo de la construcción, que no es muy elegante.
EDITAR
Parece que maven 3.0.4 ya no permite esa configuración.
No, no hay. Siempre debes especificar la versión de los padres. Afortunadamente, se hereda como la versión del módulo lo que es deseable en la mayoría de los casos. Además, Maven Release Plugin machaca automáticamente la declaración de versión de este padre, por lo que, de hecho, no es un problema que tengas una versión en 2 lugares, siempre y cuando uses Maven Release Plugin para lanzar versiones o simplemente para sobresalir.
Tenga en cuenta que hay algunos casos en los que este comportamiento es bastante correcto y le da más flexibilidad que pueda necesitar. A veces querrá usar parte de la versión anterior de los padres para heredar, sin embargo, eso no es un caso común.
También puedes usar:
$ mvn release:update-versions -DdevelopmentVersion={version}
para actualizar los números de versión en sus POM.