2010-08-19 3 views
9

Tout d'abord, j'ai une certaine compréhension du fait que ce qui suit peut ne pas être la façon généralement acceptée de faire les choses.Mise à jour d'une version de projet Maven à partir du script

Nous avons un projet Maven 2 qui a un numéro de version qui devrait être mis à jour chaque semaine, lors d'une nouvelle version. Au cours de ce processus, j'ai essayé d'éliminer toutes les choses dont on doit se souvenir et j'ai fait un script bash qui gère le processus de manière interactive.

Cependant, mon problème est la mise à jour de la version pom à partir de la ligne de commande. Je peux le faire avec sed mais je ne pense pas que ce soit très pratique. Je me demandais s'il y avait un plugin maven qui serait capable de modifier le fichier pom.xml directement à partir de la ligne de commande. La version est définie dans la section properties du pom. Serait-il possible d'écrire un plugin qui changerait les propriétés?

Merci d'avance.

Mise à jour

Il semble que ma question était avec les versions de projet définies comme des propriétés (qui ont été appliquées lors du filtrage) qui semble maintenant un peu stupide. Une chose que je cherche toujours une réponse est comment obtenir la version de certain projet de manière fiable à la ligne de commande. Auparavant, j'avais une propriété "assez unique" que j'utilisais en utilisant grep, mais maintenant l'élément <version> n'est pas unique car dans le projet enfant il y en a au moins deux. J'aurais besoin d'un analyseur XML si Maven n'a pas de solution, mais mon but est de rendre le script aussi indépendant que possible.

Je ne sais pas si j'aurais dû créer une nouvelle question, mais je ne l'ai pas fait. Obtenir la version est très étroitement liée à la définition de la version.

Répondre

13

Je me demandais s'il y avait un plugin maven qui serait capable de modifier le fichier pom.xml directement à partir de la ligne de commande.

Le Versions Maven Plugin peut le faire. Vérifiez l'objectif suivant:

  • versions:set peut être utilisé pour définir la version du projet de la ligne de commande, mettre à jour les détails de tous les modules de l'enfant si nécessaire.
+0

Merci! J'ai trouvé ce plugin moi-même, mais j'ai raté le fait que le plugin peut réellement mettre à jour le fichier pom.xml et pas seulement afficher les dépendances et autres. La définition de la version ne fonctionne pas puisque la version est définie dans le pom parent en tant que propriété, ce que je n'ai pas réalisé. Cependant, j'ai trouvé qu'il y a un objectif "update-properties" qui pourrait faire l'affaire. – mkko

+0

Apparemment, "update-properties" est seulement pour la mise à jour des dépendances et ne définit aucune valeur. "versions: set" est la correspondance la plus proche, mais il semble qu'il n'y ait aucun moyen de définir la version dans le pom parent de cette façon - ou du moins comme une propriété. – mkko

+0

@mkko: 1. Vous devez ** coder en dur la version dans le POM parent et dans les éléments 'des modules enfants, voir [MNG-624] (http://jira.codehaus.org/browse/MNG-624) pour des discussions exhaustives sur ce sujet 2. Les dépendances doivent utiliser la propriété intégrée $ {project.version} ', il n'y a pas de raison valable d'utiliser une propriété pour la version. C'est comme ça que ça fonctionne avec Maven. 3. Ensuite, vous serez capable d'utiliser 'versions: set' (mais c'est une conséquence indirecte de faire les choses correctement). –

1

De Maven POM reference:

env.X: Préfixer une variable avec "env." retournera la variable d'environnement du shell. Par exemple, $ {env.PATH} contient la variable d'environnement PATH . Remarque: Bien que les variables d'environnement elles-mêmes soient insensible à la casse sous Windows, la recherche des propriétés est sensible à la casse. Dans les autres mots , alors que le shell Windows renvoie la même valeur pour% PATH% et% Path%, Maven distingue $ {env.PATH} et $ {env.Path}. À partir de Maven 2.1.0, les noms de l'environnement variables sont normalisées à tous majuscules pour des raisons de fiabilité .

Cela signifie que vous pouvez avoir une variable d'environnement comme $ MYMAVENPROJECTVERSION et lire comme ceci:

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

Vous pouvez mettre à jour cette variable d'environnement chaque semaine, avant de lancer la construction.

J'espère que cela vous aidera.

+2

Cela ne fonctionnera pas avec les builds multi-modules (vous ** devez ** coder en dur la version dans l'élément ''). –

+0

Qu'est-ce que cela signifie? Vous ne pouvez pas utiliser des espaces réservés dans la section parent? c'est un bug? – sourcerebels

+1

Exactement, vous ne pouvez pas utiliser d'espace réservé dans la section parent. C'est par conception. L'élément parent version moins sera autorisé dans Maven 3.1. Voir http://jira.codehaus.org/browse/MNG-624 et toutes les questions connexes pour des discussions intéressantes sur ce sujet. –

Questions connexes