J'ai un projet Java utilisant Spring Framework et Git et je voulais afficher un numéro de build. J'ai trouvé le Build Number Maven plugin . Avec Git, le numéro de construction est un hachage Git. Je n'aime pas cela et je pensais qu'une date était beaucoup plus expressive.
J'ai trouvé ceci excellent article de blog expliquant comment utiliser le plugin de numéro de build avec un profil différent pour SVN et Git. Comme je viens d'utiliser Git, au lieu de créer un nouveau profil, je viens de copier la partie plug-in de ma balise de construction.
Quand je lance "paquet mvn", il me dit:
[INFO] --- buildnumber-maven-plugin:1.0:create (default) @ sherd ---
[INFO] Storing buildNumber: 2011-08-04_21-48_stivlo at timestamp: 1312487296631
Qui a l'air bien, mais je me demande, où est-il stocké? "git status" ne détecte aucun nouveau fichier et il semble qu'il ne soit pas dans la cible/trop (la cible/est dans mon .gitignore).
Peut-être dois-je changer la configuration pour stocker le numéro de build dans un fichier? Comment puis-je utiliser la valeur du numéro de build?
Grâce à l'allusion de Michael-O, j'ai lu le chapitre relatif à comment filtrer les fichiers de ressources dans le Guide de démarrage de Maven . J'ai créé un fichier application.properties dans src/main/resources/properties/application.properties avec le contenu suivant:
# application properties
application.name=${pom.name}
application.version=${pom.version}
application.build=${buildNumber}
J'ai ajouté l'extrait de code XML suivant dans ma section de construction:
<resources>
<resource>
<directory>src/main/resources/properties</directory>
<filtering>true</filtering>
</resource>
</resources>
Désormais, lorsque j'appelle depuis la ligne de commande "package mvn", ce fichier de propriétés est enregistré dans target/classes/properties/application.properties, avec par exemple le contenu suivant:
# application properties
application.name=Sherd Control Panel
application.version=1.0.1-SNAPSHOT
application.build=2011-08-05_05-55_stivlo
Tout fonctionne bien en ligne de commande, mais, soupir, m2Eclipse donne des erreurs de construction:
05/08/11 6.05.03 CEST: Build errors for obliquid-cp;
org.Apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal
org.codehaus.mojo:buildnumber-maven-plugin:1.0:create (default) on project
sherd: Cannot get the branch information from the scm repository :
Exception while executing SCM command.
Pour une raison quelconque, m2Eclipse tente de se connecter à mon référentiel, mais ne le peut pas, car il s'agit d'un référentiel Git auquel on a accès à l'aide de SSH et d'une clé privée. Je me demande si je peux dire à m2Eclipse de ne pas se connecter à Git.
Après avoir approfondi les connaissances que j'ai trouvées à propos de l'option revisionOnScmFailure, définissez-la sur true et maintenant, m2Eclipse fonctionne également. Pour référence, voici la configuration complète du plugin buildnumber maven que j'ai utilisé (il se trouve dans pom.xml dans la section build/plugins).
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<doCheck>false</doCheck>
<doUpdate>false</doUpdate>
<revisionOnScmFailure>true</revisionOnScmFailure>
<format>{0,date,yyyy-MM-dd_HH-mm}_{1}</format>
<items>
<item>timestamp</item>
<item>${user.name}</item>
</items>
</configuration>
</plugin>
Stockez-le dans un fichier de propriétés filtré. Voir Utiliser maven pour sortir le numéro de version dans un fichier texte
Vous ne devez pas définir l’option revisionOnScmFailure
sur true
, elle ne s’attend pas à un booléen. Définissez-le sur la chaîne de révision que vous souhaitez utiliser lorsque le GDS est indisponible, comme na
ou comme ça. Cela n'a pas d'importance pour votre cas puisque vous remplacez le format du numéro de build, mais ce serait plus correct.
Je ne pouvais pas reproduire le problème signalé par l'OP. Dans mon cas, la ligne de commande et m2Eclipse fonctionnent correctement et le fichier est généré correctement dans le dossier target/classes . La réponse fournie par @KasunBG est incorrecte. Le buildNumber.properties est généré uniquement si vous utilisez les éléments suivants:
<format>{0,number}</format>
<items>
<item>buildNumber</item>
</items>
buildNumber.properties est utilisé pour stocker un nombre qui peut être incrémenté. Pour cette raison (je pense) le plugin ne génère pas ce fichier si vous utilisez timestamp/scmVersion etc.
La page documentation indique que les fichiers de propriétés sont stockés dans ${basedir}/buildNumber.properties
, qui est créé lors de l'exécution de la phase buildnumber:create
.