web-dev-qa-db-fra.com

Définition de valeurs par défaut pour les propriétés Maven 2 personnalisées

J'ai un Maven pom.xml avec un plugin que je veux pouvoir contrôler sur la ligne de commande. Tout fonctionne autrement bien, sauf même après avoir cherché sur le net un moment, je ne peux pas comprendre comment définir une valeur par défaut pour ma propriété de contrôle:

<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 assignée à myProperty également sans le -DmyProperty=... commutateur. Comment cela peut-il être fait?

60
Eemeli Kantola

Vous pouvez définir la valeur par défaut de la propriété dans <build>/<properties> ou dans un profil comme illustré ci-dessous. Lorsque vous fournissez la valeur de la propriété sur la ligne de commande avec -DmyProperty=anotherValue alors il remplacera la définition du POM. Autrement dit, toutes les définitions des valeurs de propriété dans le POM sont définies uniquement une valeur par défaut pour les propriétés.

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

L'approche de Taylor L fonctionne bien, mais vous n'avez pas besoin du profil supplémentaire. Vous pouvez simplement déclarer les valeurs des propriétés 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 des propriétés dans votre fichier settings.xml utilisateur dans le cas où vous souhaitez que chaque utilisateur puisse définir ses propres valeurs par défaut. Nous utilisons cette approche pour masquer les informations d'identification que le serveur CI utilise pour certains plug-ins des développeurs réguliers.

36
DavidValeri

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>
26
Taylor Leese

La solution de @ akostadinov fonctionne très bien pour un usage commun ... Mais si la propriété souhaitée doit être utilisée par le composant 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 "aucune activation "mécanisme de test pour garantir que la valeur fournie par la ligne de commande facultative est toujours priorisée par rapport à la valeur fournie dans pom.xml. Et quelle que soit la profondeur de votre hiérarchie de pom.

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

 <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>
4
Franck Bonin

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 paramètre par défaut. Dans les cas où vous devez remplacer, utilisez mvn -P notdefault -DmyProperty=something

1
sal