J'utilise maven 3.0.4 et je souhaite rendre l'horodatage de construction accessible à mon application. Pour cela, je mets un espace réservé dans un .properties
fichier et laisse maven filtrer lors de la construction. Bien que cela fonctionne bien ${project.version}
, ${maven.build.timestamp}
n'est pas substitué au filtrage.
La propriété semble être disponible lors de la construction - je peux l'utiliser pour modifier le nom de l'artefact:
<finalName>${project.artifactId}-${maven.build.timestamp}</finalName>
Alors pourquoi n'est-il pas disponible pour le filtrage des ressources? Et, plus important encore, comment le rendre accessible?
target/${project}
dossier, mais dans ma configuration actuelle, Tomcat n'utilise pas ce dossier ...maven.build.timestamp.format
plusieurs fois?${timestamp}
par la chaîne littérale${maven.build.timestamp}
.buildTimestamp=@timestamp@
Je peux confirmer que Maven 3.x
{maven.build.timestamp}
"fonctionne" maintenant. Ils ont contourné le problème, apparemment. Aucuneproperties
solution de contournement supplémentaire n'est plus nécessaire.Attention cependant votre plugin "filtering" (maven-resources-plugin) est à jour. Il doit être relativement nouveau, donc si
mvn help:effective-pom
montre une ancienne version (ex: 2.6), remplacez-la par quelque chose de plus récent, corrigez-le pour moi, 3.x ex:<properties><timestamp>...
la solution de contournement n'est plus nécessaire ...Cela a également clarifié, en quelque sorte, pourquoi cela fonctionnait dans IntelliJ mais pas dans la ligne de commande. IntelliJ utilise probablement ses propres constantes maven "modifiées / internes", donc il fonctionnait là-bas, mais pas depuis la ligne de commande maven.
Notez également que si vous ajoutez un répertoire de ressources de filtrage à votre pom, vous devrez peut-être également "rajouter" le répertoire par défaut, il se perd, ex:
NB si vous utilisez Spring Boot comme parent, vous devez utiliser @ maven.build.timestamp @ à la place . Notez également que si vous utilisez spring boot, il y a un fichier
META-INF/build-info.properties
qui est éventuellement créé par lespring-boot-maven-plugin
que vous pouvez lire (spring fournit unBuildProperties
bean pour faciliter sa lecture).la source
<webResources><resource><filtering>
) :-( voir MWAR-415 -> il faut donc toujours utiliser la solution de contournement là<properties><timestamp>...
solution de contournement. Voir aussi issues.apache.org/jira/browse/MASSEMBLY-603Afin d'enrichir le contenu Stackoverflow pour d'autres, qui comme moi, ont trouvé ce post comme un moyen de résoudre le "problème" de
${maven.build.timestamp}
. Ce n'est pas un bug maven, mais un comportement attendu de m2e, comme on peut le voir dans cet article .Par conséquent, je crois que nous ne pouvons pas nous attendre à ce que la solution soit "corrigée", car, d'après ce que je comprends, la correction implique des problèmes conceptuels.
Dans mon cas, j'ai utilisé le plugin (
buildnumber-maven-plugin
) comme décrit dans cet autre article .la source
buildnumber-maven-plugin
des problèmes similaires, à savoir que la variable qu'elle génère n'est disponible que dans certains contextes, PAS de filtrage. Vous pouvez ou non être en mesure de surmonter cela en bricolant la phase d'exécution ou les objectifs, mais la solution intégrée semble tellement plus simple.L'ajout de propriétés Maven au niveau du projet pom ne prend pas en compte le fuseau horaire local correct, donc l'horodatage peut sembler incorrect:
L'utilisation de build-helper-maven-plugin applique le fuseau horaire correct et l'heure d'été actuelle à l'horodatage:
Lors de l'empaquetage, Maven remplacera tout horodatage de jeton dans le dossier / resources, par exemple resources / version.properties:
build.timestamp = $ {horodatage}
Vous pouvez ensuite charger ce fichier de propriétés dans votre application.
la source