En effet, Maven peut pas changer la version de son propre projet dans un run avec d'autres objectifs. De plus, autant que je sache, Maven ne supporte pas les propriétés arbitraires dans l' <version>
balise. Par conséquent, une exécution séparée est nécessaire à l'exécution d'un objectif qui va modifier la version de la POM. Il existe plusieurs plugins qui peut le faire - dans ce cas, on peut utiliser l' versions:set
objectif versions
plugin - http://mojo.codehaus.org/versions-maven-plugin/set-mojo.html
Donc, on peut l'exécuter comme suit par exemple:
mvn versions:set -DgenerateBackupPoms=false -DnewVersion=$branch-SNAPSHOT
où l' $branch
variable doit contenir actuelle de la branche Git nom; il peut être extraite avec de l' git rev-parse
, comme ceci:
branch=$(git rev-parse --abbrev-ref HEAD)
Mais encore, il faut l'exécuter en quelque sorte. Vous pouvez le faire manuellement, mais il est lourd. Donc, je pense qu'en effet le plus robuste solution serait d'aborder ce à partir de Git côté. Qu'est - a Git crochet. Voici la Git post-checkout
crochet qui va faire le travail (même code que ci-dessus avec quelques filtrage d'exécuter le crochet seulement lorsque la direction générale est vérifié, pas les fichiers individuels uniquement):
#!/bin/bash
echo 'Will change the version in pom.xml files...'
# check if the checkout was to checkout a branch
if [ $3 != '1' ]
then echo 'git checkout did not checkout a branch - quitting';exit
fi
# get current branch name
branch=$(git rev-parse --abbrev-ref HEAD)
version=$branch-SNAPSHOT
# run maven versions plugin to set new version
mvn versions:set -DgenerateBackupPoms=false -DnewVersion=$version
echo 'Changed version in pom.xml files to $version'
Mettre ce contenu dans le fichier PROJECTDIR\.git\hooks\post-checkout
le fichier. Notez que le crochet de fichier doit être exécutable à exécuter (chmod +x post-checkout
).
Quelques notes à propos de l' versions
plugin - il est assez souple et prend en charge de nombreuses options et ont peu d'autres objectifs qui peuvent être d'aide, en fonction de votre projet de la structure (utilisez-vous parent de chrysanthèmes ou pas, n'childs ont leurs propres versions, ou font-ils tirer de parent, etc.). Ainsi, le crochet ci-dessus peuvent être légèrement modifié pour vous soutenir spécifiques, au cas par l'utilisation d'autres objectifs d' versions
plugin ou par l'ajout de paramètres supplémentaires.
Pour:
- Robuste
- Pas besoin de changer quoi que ce soit dans le pom.xml les fichiers eux-mêmes pour faire ce travail
- Cette "fonctionnalité" peut être désactivé simplement en désactivant le crochet (supprimer ou non exécutable) - encore une fois, aucun changement n'est requis dans le pom.xml
Inconvénients:
- On ne peut pas s'appliquer à d'autres d'utiliser un crochet - il doit être installé manuellement après le repo est cloné (ou, vous pouvez fournir un script pour installer le crochet si Git utilisateurs ont peur de toucher les trucs à l'intérieur .répertoire git).
Mise à JOUR
Ci-après, est le plus compliqué que la version de l'hameçon, ce qui permettra non seulement de définir la version pour le nom de la branche, mais aussi de préserver le suffixe de l'ancienne version. Par exemple, à condition ancienne version master-1.0-SNAPSHOT
, la commutation de l' feature1
de la branche va changer la version du projet d' feature1-1.0-SNAPSHOT
. Ce script bash souffre de quelques problèmes (nécessite les noms de branche sans dash symbole (-
) dans le nom, et prend seulement la version de la racine pom), mais peut donner une idée de la façon dont le crochet peut être prolongée: étant donné un mélange de mvn et de commandes bash, vous pouvez extraire et mettre à jour beaucoup de l'information dans le POM.
#!/bin/bash
echo 'Will change the version in pom.xml files...'
# check if the checkout was to checkout a branch
if [ $3 != '1' ]
then echo 'git checkout did not checkout a branch - quitting';exit
fi
# get current branch name
branch=$(git rev-parse --abbrev-ref HEAD)
# get current version of the top level pom
current_version=$(mvn help:evaluate -Dexpression=project.version | grep -v '\[.*')
# extract version suffix
suffix=$(echo $current_version | cut -d \- -f 2)
# build new version
version=$branch-$suffix
# run maven versions plugin to set new version
mvn versions:set -DgenerateBackupPoms=false -DnewVersion=$version
echo 'Changed version in pom.xml files to $version'