Générer un Version.java fichier Maven
J'ai un projet en Java que je construis à l'aide d'un script Ant. Je suis en train de convertir le projet de Maven.
L'une des tâches génère un fichier source de Java appelé Version.java qui contient une Chaîne statique de la représentation de la compilation d'horodatage, comme suit:
package com.foo.bar;
public final class Version {
public static String VERSION="100301.1046";
}
La tâche Ant est très simple:
<target name="version" depends="init" description="Create Version.java">
<echo file="src/${package.dir}/Version.java" message="package ${package.name};${line.separator}" />
<echo file="src/${package.dir}/Version.java" append="true" message="public final class Version {${line.separator}" />
<echo file="src/${package.dir}/Version.java"
append="true"
message=" public static String VERSION="${buildtime}";${line.separator}" />
<echo file="src/${package.dir}/Version.java" append="true" message="}${line.separator}" />
<echo message="BUILD ${buildtime}" />
</target>
Est-il possible de faire quelque chose de similaire dans Maven, à l'aide de generate-sources, ou une autre méthode simple?
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas que ce soit la bonne façon de résoudre ce type de problème.
Une meilleure façon est de mettre les informations de version dans un
properties
fichier qui sera lu par votre programme Java:Les propriétés de votre fichier contient la ligne suivante:
Puis, dans votre
pom.xml
, indiquer que le fichier sera filtré par Maven :Lorsque Maven sera de construire votre application, il remplace tous
${...}
par leur valeur. Par défaut,${project.version}
définit la version de lapom.xml
(c'est à dire la valeur de la<version>
tag).Puis, dans votre code Java, vous aurez juste besoin de charger le
properties
fichier et de récupérer lamyApp.version
la valeur de la propriété.Notez que vous pouvez utiliser le Numéro de version du plugin pour définir quelque chose de plus "complexe" que votre version actuelle (par exemple si vous voulez mettre l'accumulation de temps dans votre propriété).
${pom.version}
(aujourd'hui obsolète) avec${project.version}
. docs.codehaus.org/display/MAVENUSER/MavenPropertiesGuidesrc/main/properties
avec des espaces réservés, et lors de l'emballage, Maven va remplacer l'espace réservé par la valeur, et incorporer un fichier de propriétés dans le .jar.Vous pouvez également utiliser
maven-remplacement-plugin
si vous vous sentez ant est un peu moche:La pom entrée peut être:
La Version.java.modèle peut être:
C'est une vieille question, mais il existe une autre solution qui n'
un excellent travailparfaitement (dans le Maven sens): Création De Modèles Plugin Maven.À l'aide de ce plugin résultats dans le traité fichier Java de la mettre dans le
target/generated-sources
dossier, comme vous le souhaitez. Et il ajoute le dossier sousgenerated-sources
pour le build path. Vous n'aurez plus l'enregistrement dans le fichier traité par erreur.Comment utiliser
D'abord le mettre à la suite sous la
src/main/java-templates/com/foo/bar/Version.java
:Puis ajoutez les lignes suivantes à votre POM:
Le dossier
target/generated-sources/java-templates
est ajouté au chemin de génération par Maven.mvn install
et ne pas avoir à la peine de rappeler l'objectif spécifique que vous avez utilisé.generate-sources
. Donc, vous avez réellement n'avez pas à appeler manuellement comme dit aussi vegemite4meVoici une autre solution qui produira le même que Ralph sa propre réponse,
à l'aide de pom propriétés de filtrage et d'un fichier de modèle:
Le fichier de modèle (VersionJava.modèle placé dans src/main/resources/version):
Le pom:
Maintenant, cela peut sembler excessif, mais il est extrêmement polyvalent, et ce que j'aime le plus à ce sujet
c'est que j'ai le fichier de modèle dans un format lisible (plutôt que de l'écho des déclarations dans le pom).
Cela me permet également de modifier la version de classe sans avoir à modifier le pom
Après plusieurs recherches sur Google, j'ai trouvé ceci (dans le pom.xml):
Il semble bien fonctionner et produit ce fichier Java:
webapp
racine, et je suppose que c'est le meilleur.Basé sur la réponse par @superole. C'est une version simplifiée, sans la nécessité de définir des propriétés supplémentaires. Le projet de version est copié dans Version.java.
Mettre
Version.java
ensrc/main/templates
:Instruire maven pour remplacer les jetons dans Version.java
Instruire maven savoir
generated-sources/java
comme build path:Enfin, permettez-Eclipse m2e
Le deuxième point est atteint par la désactivation à l'aide de la maven-ressources-plugin lors de l'augmentation de la construction d'eclipse.
thepackage
doit être remplacé par votre package: Également ajuster letargetPath
en conséquence. Je l'ai trouvé plus facile de définir le chemin d'accès danstargetpath
au lieu d'avoir plusieurs sous-dossiers danssrc/main/templates
.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 jusqu'à ce que l'emballage ou le rouleau de votre propre fichier filtré si vous ne pouvez pas ou si elle n'a pas à fournir tout ce dont vous avez besoin).Et vous voulez coller avec votre
Version
classe, alors jetez un oeil à ce fil sur le maven de la liste des utilisateurs qui est précisément de proposer une solution pour cela (basé sur le antrun plugin que vous aurez lié sur lagenerated-sources
phase).Voir http://www.gxdeveloperweb.com/Blogs/Bram-de-Kruijff/Maven-secrets-filtering-sources.htm
Je suis en train de faire à l'aide de la Maven GUERRE Plugin ajout d'informations à la Le MANIFESTE.MF fichier et, plus tard, la lecture de ce MANIFESTE.MF fichier en Java:
Cette configuration génère le MANIFESTE suivantes.MF fichier:
Et, plus tard, je suis en train de lire ce en Java comme ceci:
La norme de façon à faire avec très peu de lignes de code XML est maintenant d'utiliser le template-maven-plugin.
Voir ma réponse dans Le filtrage du code source dans Maven
En général, le Maven moyen est de décrire ce que vous voulez faire. Puis figure comment. Quand comment nécessite des dizaines ou des centaines de lignes de XML, soit trouver le bon plugin qui fait ça, ou l'écrire. Tel est le raisonnement qui a créé le template-maven-plugin :-).