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

J'ai un pompon Maven.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 commutateur -DmyProperty=.... Comment cela peut-il être fait?

52
demandé sur Rich Seller 2009-05-22 22:24:08

5 réponses

Ancienne 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 fournissez la valeur de la propriété sur la ligne de commande avec -DmyProperty=anotherValue, elle remplace la définition du POM. J'espère que j'ai été en mesure d'expliquer..

<profile>
    ...
    <properties>
        <myProperty>defaultValue</myProperty>            
    </properties>
    ...
       <configuration>
          <param>${myProperty}</param>
       </configuration>
    ...
</profile>
49
répondu akostadinov 2014-04-07 07:08:15

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

31
répondu DavidValeri 2017-03-15 00:54:53

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>
25
répondu Taylor Leese 2009-05-22 19:06:32

Akostadinov solution fonctionne très bien pour un 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 de dépendance (très tôt dans le traitement de la hiérarchie mvn pom...) vous devez utiliser le mécanisme de test du profil "None activation " pour vous assurer que la valeur fournie par la ligne de commande facultative est toujours prioritaire en ce qui concerne la valeur fournie dans pom.XML. Et ceci quelle que soit la profondeur de votre hiérarchie 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>
3
répondu Franck Bonin 2016-01-08 10:17:02

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>

Par là,

mvn clean utilisera " foo " comme paramètre par défaut. Dans les cas où vous devez remplacer, utilisez mvn -P notdefault -DmyProperty=something

1
répondu sal 2013-10-25 15:48:39