Quel est le moyen le plus simple de récupérer le numéro de version du pom.xml de maven dans le code, c'est-à-dire par programmation?
En supposant que vous utilisez Java, vous pouvez
Créez un .properties
fichier dans (le plus souvent) votre src/main/resources
répertoire (mais à l'étape 4, vous pourriez lui dire de chercher ailleurs).
Définissez la valeur d'une propriété dans votre .properties
fichier à l'aide de la propriété Maven standard pour la version du projet: foo.bar=${project.version}
Dans votre code Java, chargez la valeur du fichier de propriétés en tant que ressource à partir du chemin de classe (google pour de nombreux exemples sur la façon de procéder, mais voici un exemple pour les débutants ).
Dans Maven, activez le filtrage des ressources - cela obligera Maven à copier ce fichier dans vos classes de sortie et à traduire la ressource pendant cette copie, interprétant la propriété. Vous pouvez trouver des informations ici, mais vous le faites principalement dans votre pom:
<build> <ressources> <ressource> <directory> src / main / resources </directory> <filtering> true </filtering> </resource> </resources> </build>
Vous pouvez également accéder à d' autres propriétés standard comme project.name
, project.description
ou même des propriétés arbitraires que vous mettez dans votre pom <properties>
, etc. filtrage des ressources, combinée avec des profils Maven, peuvent vous donner un comportement de construction variable à temps de construction. Lorsque vous spécifiez un profil au moment de l'exécution avec -PmyProfile
, cela peut activer des propriétés qui peuvent ensuite apparaître dans votre build.
src/main/resources
, car cela peut traiter tous les fichiers situés dans ce répertoire, y compris les fichiers binaires. Pour éviter les comportements imprévisibles, il est préférable de filtrer sur unsrc/main/resources-filtered
répertoire, comme suggéré ici . Quoi qu'il en soit, merci pour cette belle astuce!La réponse acceptée peut être le moyen le meilleur et le plus stable pour obtenir un numéro de version dans une application de manière statique , mais ne répond pas réellement à la question d'origine: Comment récupérer le numéro de version de l'artefact à partir de pom.xml? Ainsi, je veux offrir une alternative montrant comment le faire dynamiquement pendant l'exécution:
Vous pouvez utiliser Maven lui-même. Pour être plus précis, vous pouvez utiliser une bibliothèque Maven.
Et puis faites quelque chose comme ça en Java:
Le journal de la console est le suivant:
Mise à jour 2017-10-31: Afin de répondre à la question de suivi de Simon Sobisch, j'ai modifié l'exemple comme ceci:
la source
package
pot d normal (les classes de dépendance ne sont pas intégrées) et ne fonctionne pas lorsqu'il est empaqueté avec maven-assembly-pluginjar-with-dependencies
que j'obtiens ajava.io.FileNotFoundException: pom.xml
(il se trouve dans le pot finalMETA-INF/maven/my.package/myapp/pom.xml
) - des conseils pour résoudre ce problème?Les artefacts emballés contiennent un
META-INF/maven/${groupId}/${artifactId}/pom.properties
fichier dont le contenu ressemble à:De nombreuses applications utilisent ce fichier pour lire la version de l'application / jar lors de l'exécution, aucune configuration n'est requise.
Le seul problème avec l'approche ci-dessus est que ce fichier est (actuellement) généré pendant la
package
phase et ne sera donc pas présent pendant les tests, etc. (il y a un problème avec Jira pour changer cela, voir MJAR-76 ). Si c'est un problème pour vous, alors l'approche décrite par Alex est la voie à suivre.la source
Il existe également la méthode décrite dans Easy way pour afficher le numéro de version de vos applications à l'aide de Maven :
Ajoutez ceci à pom.xml
Ensuite, utilisez ceci:
J'ai trouvé cette méthode plus simple.
la source
getImplementationVersion()
étaitnull
. (maven version 3.0.4).war
artefacts, n'oubliez pas d'utilisermaven-war-plugin
au lieu demaven-jar-plugin
getImplementationVersion()
renvoie null).Si vous utilisez un emballage mvn tel que pot ou guerre, utilisez:
Il lit une propriété "Implementation-Version" du META-INF / MANIFEST.MF généré (qui est défini sur la version de pom.xml) dans l'archive.
la source
Pour compléter ce que @kieste a posté, ce qui, à mon avis, est le meilleur moyen pour que Maven compile les informations disponibles dans votre code si vous utilisez Spring-boot: la documentation sur http://docs.spring.io/spring-boot/ docs / current / reference / htmlsingle / # production-ready-application-info est très utile.
Il vous suffit d'activer les actionneurs et d'ajouter les propriétés dont vous avez besoin dans votre
application.properties
ouapplication.yml
la source
Utilisez cette bibliothèque pour la facilité d'une solution simple. Ajoutez au manifeste tout ce dont vous avez besoin, puis interrogez par chaîne.
http://manifests.jcabi.com/index.html
la source
Parfois, la ligne de commande Maven est suffisante lors de l'écriture d'un script lié à la version du projet, par exemple pour la récupération d'artefacts via une URL à partir d'un référentiel:
Exemple d'utilisation:
la source
Obtenir la version en utilisant
this.getClass().getPackage().getImplementationVersion()
PS N'oubliez pas d'ajouter:
la source
En référence à la réponse de Ketankk :
Malheureusement, l'ajout de cela a gâché la façon dont ma demande traitait les ressources:
Mais l'utilisation de cette balise <manifest> de maven-assemble-plugin a fait l'affaire:
J'ai donc pu obtenir la version en utilisant
la source