2010-09-15 8 views
1

Je suit pom.xmlMaven priorité propriété système

<project> 
    <properties> 
    <buildNumber>dev</buildNumber> 
    </properties> 
    <build> 
    <finalName>${project.artifactId}-${project.version}-${buildNumber}</finalName> 
    </build> 
</project> 

Cela fonctionne très bien sur la machine de développement. Si je cours mvn package j'ai l'artefact project-1.1-dev.war. Si je cours mvn package -DbuildNumber=121 j'ai package-1.1-121.war.

Mais sur serveur CI (TeamCity) toujours obtenu project-1.1-dev.war malgré le fait que buildNumber propriété a été transférée à Maven (si je supprime la définition de la propriété par défaut de pom.xml, Maven construit artefact avec nom de fichier correct).

Il semble que la priorité de résolution de propriété du système dépende en quelque sorte de la plate-forme (la version de maven est égale à la fois sur le développeur et TC-2.2.1)?

Répondre

1

C'est un peu étrange ... Peut-être que vous ne pouvez pas forcer le paramètre donné dans la ligne de commande à avoir la plus haute 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> 

Donc, 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 ! avant qu'un identifiant de profil indique que le profil doit être désactivé).

-1

Connaissez-vous le concept des versions SNAPSHOT? Cela ressemble à ce que vous essayez de faire, et est soutenu par Maven. On dirait que vous voulez construire majeur-mineur-incrémentale ou major-mineur- dev, si vous pouvez vivre avec -incremental- majeur-mineur INSTANTANÉ elle devrait plutôt faire ce que vous voulez.

+0

Pas exactement. J'ai besoin d'un moyen de distinguer deux artefacts de construction (quand ils sont déployés en production). Utilisation de SNAPSHOT je ne peux pas faire cela. Tous les artefacts de construction auront le nom 'project-1.1-SNAPSHOT.war' –

+0

Si vous avez deux versions distinctes que vous allez déployer en production, elles doivent avoir des numéros de version différents, l'acte de créer une version devrait consommer une version. * SNAPSHOT * builds (ou dev builds) ne devrait jamais être déployé. Êtes-vous en train de dire que votre construction est différente selon la machine sur laquelle elle a été construite? –

+0

Nous avons un cycle de développement incrémentiel, et changeons la version dans le descripteur POM après chaque changement de code source est exagéré pour nous. Nous utilisons donc le schéma suivant: le développeur définit la version de l'artefact (basée sur la sémantique du changement: compatibilité descendante, etc.) et le compteur d'incrémentation du serveur CI pour marquer les artefacts. Les artefacts "dev" ne sont pas déployés en production. –

1

La réponse à votre question se trouve dans une autre question ici sur le SO: Maven property overloading

En bref, vous devez passer -DbuildNumber=121 sur la ligne de commande Maven (sur le « 3 build étape: maven page »), parce que la mise en La propriété système "buildNumber" sur la page "6 propriétés et variables" ne remplace pas la propriété maven.

Questions connexes