2009-05-22 8 views
50

J'ai un Maven pom.xml avec un plugin que je veux pouvoir contrôler sur la ligne de commande. Tout ça, fonctionne bien, à l'exception même après avoir recherché un net alors que je ne peux pas comprendre comment définir une valeur par défaut de ma propriété de contrôle:Définition de valeurs par défaut pour les propriétés Maven 2 personnalisées

<plugin> 
    ... 
    <configuration> 
     <param>${myProperty}</param> 
    </configuration> 
    ... 
</plugin> 

Donc, si je lance Maven avec

mvn -DmyProperty=something ... 

Tout va bien, mais j'aimerais avoir une valeur spécifique affectée à myProperty sans le commutateur -DmyProperty=.... Comment cela peut-il être fait?

Répondre

43

Vieille question mais je pense que la réponse la plus simple n'est pas là. Vous pouvez avoir la valeur par défaut de la propriété définie dans <build>/<properties> ou dans un profil comme indiqué ci-dessous. Lorsque vous indiquez la valeur de la propriété sur la ligne de commande avec -DmyProperty=anotherValue, il remplace la définition du POM. J'espère que je suis en mesure d'expliquer ..

<profile> 
    ... 
    <properties> 
     <myProperty>defaultValue</myProperty>    
    </properties> 
    ... 
     <configuration> 
      <param>${myProperty}</param> 
     </configuration> 
    ... 
</profile> 
1

Cela pourrait fonctionner pour vous:

<profiles> 
    <profile> 
    <id>default</id> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 
    <build> 
    <plugin> 
     <configuration> 
     <param>Foo</param> 
     </configuration> 
    </plugin> 
    </build> 
    ... 
    </profile> 
    <profile> 
    <id>notdefault</id> 
    ... 
    <build> 
     <plugin> 
     <configuration> 
      <param>${myProperty}</param> 
     </configuration> 
    </plugin> 
    </build> 
    ... 
    </profile> 
</profiles> 

De cette façon,

mvn clean utilisera "foo" comme défaut param. Dans le cas où vous devez remplacer, utiliser mvn -P notdefault -DmyProperty=something

+1

pourrait pas être simplifié un peu à l'aide d'un bloc d'activation pour activer nodefault à moins qu'aucune propriété -D a été adoptée à tout. – djangofan

+0

@djangofan vous avez raison. J'essayais de faire une réponse en remplacement de la question. – sal

25

Vous pouvez utiliser quelque chose comme ci-dessous:

<profile> 
    <id>default</id> 
    <properties> 
     <env>default</env> 
     <myProperty>someValue</myProperty>    
    </properties> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 
</profile> 
+0

Droit, ça l'a fait, merci! –

+0

Super. Aucun problème. –

30

approche Taylor L'fonctionne très bien, mais vous n'avez pas besoin du profil supplémentaire. Vous pouvez simplement déclarer les valeurs de propriété dans le fichier POM.

<project> 
    ... 
    <properties> 
    <!-- Sets the location that Apache Cargo will use to install containers when they are downloaded. 
     Executions of the plug-in should append the container name and version to this path. 
     E.g. apache-tomcat-5.5.20 --> 
    <cargo.container.install.dir>${user.home}/.m2/cargo/containers</cargo.container.install.dir> 
    </properties> 
</project> 

Vous pouvez également définir les propriétés utilisateur dans votre fichier settings.xml dans le cas où vous voulez que chaque utilisateur soit en mesure de définir leurs propres valeurs par défaut. Nous utilisons cette approche pour masquer les informations d'identification que le serveur CI utilise pour certains plug-ins de développeurs réguliers.

2

solution akostadinov fonctionne très bien pour l'usage courant ... Mais si la propriété désirée doit être utilisée par le composant du réacteur pendant la phase de résolution des dépendances (très tôt dans le traitement de la hiérarchie mvn pom. ..) vous devez utiliser le profil "aucun activation" mécanisme de test pour s'assurer que la valeur de ligne de commande facultative fournie est toujours priorisée par rapport à la valeur fournie dans pom.xml. Et ceci quelle que soit la profondeur de votre hiérarchie de pom.

Pour ce faire, ajoutez ce type de profil dans votre pom.xml parent:

<profiles> 
    <profile> 
     <id>my.property</id> 
     <activation> 
     <property> 
      <name>!my.property</name> 
     </property> 
     </activation> 
     <properties> 
     <my.property>${an.other.property} or a_static_value</my.property>    
     </properties> 
    </profile> 
    </profiles> 
+1

Pourriez-vous montrer un exemple de pom où '-D' normal ne fonctionne pas? – akostadinov

Questions connexes