système Maven priorité propriété
-
02-10-2019 - |
Question
Je suit pom.xml
<project>
<properties>
<buildNumber>dev</buildNumber>
</properties>
<build>
<finalName>${project.artifactId}-${project.version}-${buildNumber}</finalName>
</build>
</project>
Cela fonctionne bien sur la machine de développement. Si je cours mvn package
j'ai artefact project-1.1-dev.war
. Si je cours mvn package -DbuildNumber=121
j'ai package-1.1-121.war
.
Mais sur serveur CI (de TeamCity) de project-1.1-dev.war
toujours obtenu en dépit du fait que les biens buildNumber
passé à maven (si je supprime la définition de la propriété par défaut de pom.xml
, construit maven artefact avec nom de fichier correct).
Il semble que la détermination propriété système priorité est dépend en quelque sorte sur la plate-forme (version Maven est égale à la fois sur la machine de développement et TC - 2.2.1)?
La solution
C'est un peu étrange ... Peut-être que vous ne pouvez pas forcer le paramètre donné dans la ligne de commande pour avoir une plus grande priorité que celle définie dans la balise <properties>
.
Une idée est d'utiliser un profil qui définissent la propriété buildNumber
:
<profiles>
<profile>
<id>dev-property</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<buildNumber>dev</buildNumber>
</properties>
</profile>
</profiles>
Par défaut, buildNumber
sera égal à la valeur dev
. Maintenant, dans votre ligne de commande TeamCity, désactivez ce profil avec la commande mvn ... -P !dev-property
(le !
devant un identifiant de profil indique que le profil doit être désactivé).
Autres conseils
La réponse à votre question réside dans une autre question ici sur le SO: Maven propriété surcharge
En bref, vous devez passer -DbuildNumber=121
sur la ligne de commande Maven (sur le « 3 build étape: maven » page) page, parce que la mise en propriété système « buildNumber » sur la « 6 propriétés et les variables » ne remplace pas le maven propriété.