plugin exclude example java maven version

java - exclude - Versión de Maven con una propiedad



maven-resources-plugin example (5)

Tengo un gran proyecto Maven (Tycho) que tiene aproximadamente 400 plug-ins.

Hemos especificado la versión de la aplicación en cada archivo POM.

¿Hay alguna manera de especificar la versión para todos los POM: s solo en un lugar?

Yo esperaría que algunos piensen así:

<properties> <buildVersion>1.1.2-SNAPSHOT</buildVersion> </properties> .... <version>${buildVersion}</version>

Tenemos el padre pom.xml :

<modelVersion>4.0.0</modelVersion> <groupId>company</groupId> <artifactId>build.parent</artifactId> <version>1.1.2-SNAPSHOT</version> <packaging>pom</packaging>

Luego, en cada POM, se hace referencia al POM padre:

<parent> <artifactId>build.parent</artifactId> <groupId>company</groupId> <relativePath>../build.parent/pom.xml</relativePath> <version>1.1.2-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>company</groupId> <artifactId>artifact</artifactId> <version>1.1.2-SNAPSHOT</version> <packaging>eclipse-plugin</packaging>


Con una versión de 3.5 de Maven o superior, deberías poder usar un marcador de posición (ej. $ {Revisión}) en la sección principal y dentro del resto del pom, puedes usar ${project.version} .

En realidad, también puede omitir las propiedades del proyecto fuera de los parent que son las mismas, ya que se heredarán. El resultado se vería así:

<project> <parent> <artifactId>build.parent</artifactId> <groupId>company</groupId> <relativePath>../build.parent/pom.xml</relativePath> <version>${revision}</version> <!-- use placeholder --> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>artifact</artifactId> <!-- no ''version'', no ''groupId''; inherited from parent --> <packaging>eclipse-plugin</packaging> ... </project>

Para obtener más información, especialmente sobre cómo resolver el marcador de posición durante la publicación, consulte las versiones amigables de Maven CI | Configuración de módulos múltiples .


El uso de una propiedad para la versión genera la siguiente advertencia:

[WARNING] [WARNING] Some problems were encountered while building the effective model for xxx.yyy.sandbox:Sandbox:war:0.1.0-SNAPSHOT [WARNING] ''version'' contains an expression but should be a constant. @ xxx.yyy.sandbox:Sandbox:${my.version}, C:/Users/xxx/development/gwtsandbox/pom.xml, line 8, column 14 [WARNING] [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build. [WARNING] [WARNING] For this reason, future Maven versions might no longer support building such malformed projects. [WARNING]

Si su problema es que tiene que cambiar la versión en varios lugares porque está cambiando versiones, entonces lo correcto es usar el complemento Maven Release Plugin que lo hará automáticamente.


La respuesta correcta es esta (versión de ejemplo):

  • En el pom.xml principal debe tener ( no dentro de las properties ):

    <version>0.0.1-SNAPSHOT</version>

  • En todos los módulos secundarios debes tener:

    <parent> <groupId>com.vvirlan</groupId> <artifactId>grafiti</artifactId> <version>0.0.1-SNAPSHOT</version> </parent>

Por lo tanto, está codificado.

Ahora, para actualizar la versión, haz esto:

mvn versions:set -DnewVersion=0.0.2-SNAPSHOT

y todos sus 400 módulos tendrán la versión principal actualizada.


Si está utilizando Maven 3, una opción para evitar este problema es usar el plugin de versiones http://www.mojohaus.org/versions-maven-plugin/

Específicamente los comandos,

mvn versions:set -DnewVersion=2.0-RELEASE mvn versions:commit

Esto actualizará los poms padres e hijos a 2.0-RELEASE. Puede ejecutar esto como un paso de compilación anterior.

A diferencia del complemento de lanzamiento, no intenta hablar con el control de origen


Si tiene un proyecto principal, puede configurar la versión en el archivo pom padre y en los elementos secundarios puede hacer referencia a las bibliotecas sibling con las propiedades $ {project.version} o $ {version} .

Si desea evitar repetir la versión del elemento primario en cada elemento secundario, puede hacer esto:

<modelVersion>4.0.0</modelVersion> <groupId>company</groupId> <artifactId>build.parent</artifactId> <version>${my.version}</version> <packaging>pom</packaging> <properties> <my.version>1.1.2-SNAPSHOT</my.version> </properties>

Y luego en tus hijos pom tienes que hacer:

<parent> <artifactId>build.parent</artifactId> <groupId>company</groupId> <relativePath>../build.parent/pom.xml</relativePath> <version>${my.version}</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>company</groupId> <artifactId>artifact</artifactId> <packaging>eclipse-plugin</packaging> <dependencies> <dependency> <groupId>company</groupId> <artifactId>otherartifact</artifactId> <version>${my.version}</version> or <version>${project.version}</version> </dependency> </dependencies>

hth