2010-07-20 7 views
8

J'utilise deux profils: développement et production.maven release plugin ignore la releaseProfile

Le développement devrait être actif par défaut; la production devrait être utilisée quand je libère.

Dans mon pom.xml j'ai:

[...] 
<plugin> 
<artifactId>maven-release-plugin</artifactId> 
<version>2.0-beta-9</version> 
<configuration> 
    <useReleaseProfile>false</useReleaseProfile> 
    <goals>deploy</goals> 
    <arguments>-Pproduction</arguments> 
</configuration> 
</plugin> 
[...] 
<profiles> 
    <profile> 
    <id>production</id> 
    <properties> 
     <profile.name>production</profile.name> 
    </properties> 
    [...] 
    </profile> 
    <profile> 
    <id>development</id> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 
    <properties> 
    <profile.name>development</profile.name> 
    </properties> 
     [...] 
    </profile> 
[...] 

Il ne fonctionne tout simplement pas.
useReleaseProfiles ne fonctionne pas non plus: http://jira.codehaus.org/browse/MRELEASE-459

Le profil de développement doit être toujours actif, mais pas lors de l'exécution mvn release:perform. Comment y parvenez-vous?

[MISE À JOUR]: J'ai vu avec le drapeau de débogage que mon profil de production est utilisé, mais le profil de développement est également utilisé, car il est activeByDefault. Cela ne peut pas être remplacé par l'argument releaseProfile. Ce serait bien de forcer le plugin de release à utiliser seulement le profil "production".

Répondre

13

Le maven-release-plugindocumentation en utilisant le paramètre encourage de configuration releaseProfiles pour appeler automatiquement les profils au cours du processus de libération.

Il est préférable d'appeler manuellement les profils de version à partir de la ligne de commande. Une des raisons en est que les profils utilisés dans la version seront documentés dans le pom.xml et stockés avec le code étiqueté. Cela rend le processus de construction plus facile à comprendre et plus facile à répéter plus tard, exactement de la même manière que le projet a été initialement publié.

Si vous utilisez maven-release-plugin antérieur à 2.4, voir bug pour empêcher l'utilisation du paramètre mentionné ci-dessus. Sachez que dans le cas d'un projet multi-module, vous devrez mettre la configuration "releaseProfiles" dans la racine pom! Voir aussi this issue pour plus d'informations à ce sujet.

+1

@editor, Mieux vaut écrire que le bug a été corrigé, ici, sous forme de commentaire. – Arun

+0

@Leif Merci pour la mise à jour sur ce correctif! – devdanke

+0

Même avec 2.5.1, je dois encore spécifier mon profil manuellement «-Prelease» sur la CLI. –

2

Je pense que vous devriez simplement activer vos profils à travers une propriété.

<profiles> 
    <profile> 
    <id>production</id> 
    <activation> 
     <property> 
     <name>build</name> 
     <value>release</value> 
     </property> 
    </activation> 
    [...] 
    </profile> 
    <profile> 
    <id>development</id> 
    <activation> 
     <property> 
     <name>build</name> 
     <value>develop</value> 
     </property> 
    </activation> 
    [...] 
    </profile> 
<profiles> 

Faites vos builds en exécutant quelque chose comme ça

mvn -Dbuild=develop package 
mvn -Dbuild=develop test 

mvn -Dbuild=release release:prepare 
mvn -Dbuild=release release:perform 
+0

oui, je l'ai déjà savoir qu'il est possible de définir le profil comme celui-ci. Mais de cette façon, il peut être oublié.Si vous l'oubliez, le package publié contiendra des fichiers de configuration incorrects et le déploiement échouera. Je voudrais appliquer le plugin de version pour utiliser uniquement le profil donné. – Janning

+0

Il ne faut pas oublier que vous définissez certaines propriétés dans les profils requis et utilisés par le plugin de version. – splash

+0

Je ne comprends pas votre dernier commentaire. Pourriez-vous m'expliquer s'il vous plaît? – Janning

1

Si vous cochez "Introduction to Build Profiles", « un profil Désactiver »:

mvn groupId:artifactId:goal -P !profile-1,!profile-2 

Je suppose que vous pouvez utiliser pour désactiver votre profil par défaut?

0

Ceci est un très vieux article, mais j'ai récemment rencontré ce problème. Le releaseProfile ne fonctionnait pour moi quand je mets les releaseProfiles au profil appelé libération. Tout autre profil donne la même erreur.

Exemple de code:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-release-plugin</artifactId> 
      <version>2.5.3</version> 
      <configuration> 
       <tagNameFormat>@{project.artifactId}[email protected]{project.version}</tagNameFormat> 
       <autoVersionSubmodules>true</autoVersionSubmodules> 
       <releaseProfiles>release</releaseProfiles> 
       <allowTimestampedSnapshots>true</allowTimestampedSnapshots> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<profiles> 
    <profile> 
     <id>release</id> 
     <properties> 
      <connectionUrl>${scm-base}/tags/${project.artifactId}-${project.version}</connectionUrl> 
     </properties> 
    </profile> 
</profiles>