J’ai un projet Java que je construis en utilisant un script Ant. J’essaie de convertir le projet en Maven.
L’une des tâches génère un fichier source Java appelé Version.java qui contient une représentation statique de la chaîne temporelle de compilation, comme suit:
Lorsque Maven construira votre application, elle remplacera tous les ${...} par leur valeur. Par défaut, ${project.version} définit la version du pom.xml (c’est-à-dire la valeur de la ).
Ensuite, dans votre code Java, il vous suffit de charger le fichier de properties et de récupérer la valeur de la propriété myApp.version .
Notez que vous pouvez utiliser le plug-in Build Number pour définir quelque chose de plus “complexe” que votre version actuelle (par exemple, si vous souhaitez placer le temps de compilation dans votre propriété).
Vous pouvez aussi utiliser maven-replacer-plugin si vous pensez que mt est un peu moche:
package com.stackoverflow; public final class Version { public static final Ssortingng build_number="@buildnumber@"; public static final Ssortingng build_time="@buildtime@"; public static final Ssortingng pomversion="@pomversion@"; }
C’est une vieille question, mais il y a une autre solution qui fait un excellent travail parfaitement (au sens de Maven): Templating Maven Plugin .
En utilisant ce plug-in, le fichier Java traité est placé dans le dossier target/generated-sources , comme prévu. Et il ajoute le dossier sous les generated-sources au chemin de compilation. Vous ne pourrez plus enregistrer le fichier traité par erreur.
Comment utiliser
src/main/java-templates/com/foo/bar/Version.java abord les éléments suivants sous src/main/java-templates/com/foo/bar/Version.java :
package com.foo.bar; public final class Version { public static final Ssortingng VERSION = "${project.version}"; }
Maintenant, cela peut sembler excessif, mais il est extrêmement polyvalent, et ce que j’aime le plus, c’est que le fichier de modèle se trouve dans un format lisible (plutôt que de renvoyer des instructions dans le pom). Cela me permet également de modifier la classe de la version sans avoir à changer le pom
Basé sur la réponse de @superole . Ceci est une version simplifiée sans avoir besoin de définir des propriétés supplémentaires. Seule la version du projet est copiée dans Version.java.
Placez Version.java dans src/main/templates :
package thepackage; public final class Version { public static Ssortingng VERSION="${project.version}"; }
Demander à maven de remplacer les jetons dans Version.java
thepackage doit être remplacé par votre package: ajustez également le targetPath conséquence. J’ai trouvé plus facile de définir le chemin dans targetpath au lieu d’avoir plusieurs sous-dossiers dans src/main/templates .
Après plus de googling, je suis venu avec ceci (dans le pom.xml):
Il semble bien fonctionner et produit ce fichier Java:
package com.foo.bar; public final class Version { public static Ssortingng VERSION="100318.1211"; }
Comme suggéré par @Romain, vous pouvez lire la version à partir d’un fichier de propriétés (soit /META-INF/maven/groupId/artifactId/pom.properties si vous pouvez attendre le packaging ou lancer votre propre fichier filtré si vous ne pouvez pas ou s’il ne fournit pas tout ce dont vous avez besoin).
Et est-ce que vous voulez vous en tenir à votre classe de Version actuelle, alors jetez un œil sur ce thread dans la liste des utilisateurs de maven qui propose précisément une solution (basée sur le plug-in antrun que vous allez lier dans la phase generated-sources ) .
Je le fais en utilisant le plug- in WAR Maven en ajoutant des informations au fichier MANIFEST.MF et en lisant plus tard ce fichier MANIFEST.MF en Java:
La méthode standard pour faire cela avec très peu de lignes de code XML consiste maintenant à utiliser le plugin templating-maven.
Voir ma réponse dans Filtrage du code source dans Maven
En général, la méthode Maven consiste à décrire ce que vous voulez faire. Puis figure comment . Lorsque vous avez besoin de dizaines ou de centaines de lignes de XML, vous pouvez soit trouver le bon plug-in qui le fait, soit l’écrire. C’était la raison d’être du plugin templating-maven :-).