Tengo dos proyectos: Proyecto principal: A, Subproyecto: 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 el <version>0.1-SNAPSHOT</version>
de B/pom.xml
debajo de la sección principal, Maven se queja de la versión que falta para el padre.
¿Hay alguna forma de usarla ${project.version}
o algo así para evitar tenerla 01.-SNAPSHOT
en ambos poms?
inheritance
maven
Shengjie
fuente
fuente
Respuestas:
EDITAR: desde Maven 3.5.0 hay una buena solución para esto usando
${revision}
marcador de posición. Vea la respuesta de FrVaBe para más detalles. Para versiones anteriores de Maven, vea mi respuesta original a continuación.No, no hay Siempre debe 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, la declaración de versión de este padre es eliminada automáticamente por Maven Release Plugin, por lo que, de hecho, no es un problema que tenga la versión en 2 lugares, siempre y cuando use Maven Release Plugin para lanzar o simplemente versiones.
Tenga en cuenta que hay algunos casos en que este comportamiento es bastante bueno y le brinda más flexibilidad que pueda necesitar. A veces, desea utilizar algunas de las versiones anteriores de los padres para heredar, sin embargo, ese no es un caso convencional.
fuente
${revision}
marcador de posición para esto. Ver mi respuesta ;-)Maven no está diseñado para funcionar de esa manera, pero existe una solución alternativa para lograr este objetivo (quizás 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:
Padre pom
Niño pom
Utilicé ese truco durante 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, lo que no es muy elegante.
EDITAR
Parece que maven 3.0.4 ya no permite tal configuración.
fuente
'version' contains an expression but should be a constant.
La forma más fácil de actualizar las versiones IMO:
(hazlo en tu carpeta raíz / pom principal).
Sus POM se analizan y se le pregunta qué versión configurar.
fuente
mvn versions:update-child-modules
contrario, se omitirá toda la versión de pom del módulo hijo.Desde Maven 3.5.0 puede usar el
${revision}
marcador de posición para eso. El uso se documenta aquí: Versiones amigables de Maven CI .En resumen, el pom padre se ve así (citado de la documentación de Apache):
y el niño pom así
También tienes que usar el complemento Flatten Maven para generar documentos pom con el número de versión dedicado incluido para la implementación. El HowTo está documentado en la documentación vinculada.
También @khmarbaise escribió una buena publicación de blob sobre esta característica: Maven: ¿Archivos POM sin una versión?
fuente
${revision}
en el pom (en el repositorio maven) como dependencia en otro proyecto. No creo que esto funcione.${revision}
en la etiqueta de la versión con la nueva versiónComo mencionó Yanflea, 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
Módulo POM.xml
Usted es libre de cambiar
myversion
a lo que quiera que no sea una propiedad reservada.fuente
También puedes usar:
para actualizar los números de versión en sus POM.
fuente
La respuesta de eFox funcionó para un solo proyecto, pero no cuando hacía referencia a un módulo de otro (los pom.xml todavía estaban almacenados 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 la propiedad.La única opción que cambié en la definición del complemento es
outputDirectory
, está vacía por defecto, pero prefiero tenerlatarget
, que está configurada en mi.gitignore
configuración:La configuración del complemento va en el pom.xml padre
fuente
Úselo
mvn -N versions:update-child-modules
para actualizar la versión del niño pom`shttps://www.mojohaus.org/versions-maven-plugin/examples/update-child-modules.html
fuente
Quiere decir que desea eliminar la versión del bloque principal del pom de B, creo que no puede hacerlo, el groupId, artifactId y la versión especificaron las coordenadas de pom del padre, lo que puede omitir es la versión del niño.
fuente