2010-08-19 14 views
9

Antes que nada, tengo algún tipo de entendimiento de que la siguiente puede no ser la forma generalmente aceptada de hacer las cosas.Actualice una versión de proyecto de Maven desde el script

Tenemos un proyecto Maven 2 que tiene un número de versión que se debe actualizar cada semana más o menos, durante una nueva versión. Durante este proceso, he intentado eliminar todas las cosas que uno tiene que recordar y he creado un script bash que maneja el proceso de forma interactiva.

Sin embargo, mi problema es actualizar la versión de pom desde la línea de comandos. Puedo hacer esto con sed, pero no creo que sea muy conveniente. Me preguntaba si hay algún complemento Maven que pueda modificar el pom.xml directamente desde la línea de comandos. La versión se establece en la sección de propiedades del pom. ¿Sería posible escribir un complemento que cambiaría las propiedades?

Gracias de antemano.

actualización

parece que mi problema fue con las versiones del proyecto definidos como propiedades (que se aplicaron al filtrar) que parece ahora un poco tonto.

Una cosa que todavía estoy buscando una respuesta es cómo obtener la versión de cierto proyecto de manera confiable a la línea de comandos. Anteriormente tenía una propiedad "bastante única" que obtuve usando grep, pero ahora el elemento <version> no es exclusivo, ya que en el proyecto hijo hay al menos dos de estos. Necesitaría algún tipo de analizador XML si Maven no tiene soluciones, pero mi objetivo es hacer que el guión sea lo más independiente posible.

No estoy seguro de si debería haber creado una nueva pregunta a partir de esto, pero no lo hice. Obtener la versión está muy relacionado con la configuración de la versión.

Respuesta

13

Me preguntaba si hay algún complemento maven que pueda modificar el pom.xml directamente desde la línea de comandos.

El Versions Maven Plugin puede hacerlo. Compruebe el siguiente objetivo:

  • versions:set se puede utilizar para establecer la versión del proyecto de la línea de comandos, la actualización de los datos de los módulos de niño según sea necesario.
+0

Gracias! Encontré ese plugin por mi cuenta, pero de alguna manera me olvidé del hecho de que el complemento realmente puede actualizar el pom.xml y no solo mostrar dependencias y demás. Establecer la versión no funciona, ya que la versión está definida en el pom padre como una propiedad, que no me di cuenta de mencionar. Sin embargo, descubrí que hay un objetivo "actualizar-propiedades" que podría ser el truco. – mkko

+0

Aparentemente, "update-properties" solo es para actualizar dependencias y no establecer ningún valor. "versions: set" es la coincidencia más cercana, pero parece que no hay forma de definir la versión en el pom padre de esta manera, o al menos como una propiedad. – mkko

+0

@mkko: 1. En realidad ** debes ** codificar la versión en el POM padre y en los elementos '' de los módulos secundarios, ver [MNG-624] (http://jira.codehaus.org/browse/MNG-624) para discusiones exhaustivas sobre este tema 2. Las dependencias deben usar la propiedad incorporada '$ {project.version}', no hay una razón válida para usar una propiedad para la versión. Así es como funciona con Maven. 3. Y luego podrás usar 'versions: set' (pero esta es una consecuencia indirecta de hacer las cosas bien). –

1

De Maven POM reference:

env.X: "env" prefijar una variable con devolverá la variable de entorno de la shell. Por ejemplo, $ {env.PATH} contiene la variable de entorno PATH . Nota: Mientras que las variables de entorno son case-insensitive en Windows, la búsqueda de propiedades distingue mayúsculas de minúsculas. En otras palabras , mientras que el shell de Windows devuelve el mismo valor para% PATH% y% Path%, Maven distingue entre $ {env.PATH} y $ {env.Path}. A partir de Maven 2.1.0, los nombres de las variables de entorno se normalizan a todos mayúsculas por el bien de la confiabilidad .

Eso significa que usted puede tener una variable de entorno como $ MYMAVENPROJECTVERSION y leerlo como esto:

<version>${env.MYMAVENPROJECTVERSION}</version> 

Puede actualizar esta variable de entorno cada semana, antes de ejecutar la acumulación.

Espero que esto te ayude.

+2

Esto no funcionará con compilaciones de varios módulos (** debes ** codificar la versión en el elemento '' duro). –

+0

¿Qué significa? ¿No puedes usar marcadores de posición en la sección principal? Es un error? – sourcerebels

+1

Exactamente, no puede usar marcadores de posición en la sección padre. Es por diseño. Versión menos elemento padre se permitirá en Maven 3.1. Ver http://jira.codehaus.org/browse/MNG-624 y todos los temas relacionados para discusiones interesantes sobre este tema. –

Cuestiones relacionadas