J'ai un fichier Maven POM avec une configuration et dans la section plugins, j'ai un plugin maven Tomcat avec une configuration comme celle-ci:
<configuration>
<url>http://localhost:8080/manager/html</url>
<server>Tomcat</server>
</configuration>
Je voudrais exporter le paramètre d'URL dans un fichier de propriété, par exemple Tomcat.properties avec cette clé:
url=http://localhost:8080/manager/html
Et comment puis-je lire cette clé dans mon fichier POM?
Maven vous permet de définir des propriétés dans le POM du projet. Vous pouvez le faire en utilisant un fichier POM similaire au suivant:
<project>
...
<properties>
<server.url>http://localhost:8080/manager/html</server.url>
</properties>
...
<build>
<plugins>
<plugin>
...
<configuration>
<url>${server.url}</url>
<server>Tomcat</server>
</configuration>
...
</plugin>
</plugins>
</build>
</project>
Vous pouvez éviter de spécifier la propriété dans la balise properties
et transmettre la valeur de la ligne de commande comme suit:
mvn -Dserver.url=http://localhost:8080/manager/html some_maven_goal
Maintenant, si vous ne voulez pas les spécifier à partir de la ligne de commande et si vous avez besoin d'isoler davantage ces propriétés du POM du projet, dans un fichier de propriétés, vous devrez utiliser le plugin Properties Maven , et exécutez c'est read-project-properties
objectif dans le phase d'initialisation du cycle de vie Maven . L'exemple de la page du plugin est reproduit ici:
<project>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<!-- Associate the read-project-properties goal with the initialize phase, to read the properties file. -->
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>etc/config/dev.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Exemple de travail complet disponible sur: http://hg.defun.work/exp/file/tip/maven/properties
Voici une partie essentielle de pom.xml :
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
</execution>
</executions>
<configuration>
<files>
<file>dev.properties</file>
</files>
</configuration>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<echo>project.build.sourceEncoding is "${project.build.sourceEncoding}"</echo>
<echo>foo is "${foo}"</echo>
<echo>with-spaces is "${with-spaces}"</echo>
<echo>existent.property is "${existent.property}"</echo>
<echo>nonexistent.property is "${nonexistent.property}"</echo>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
Comme vous pouvez le voir properties-maven-plugin toujours au stade alpha, c'est pourquoi je déteste Maven comme outils de construction ...
Il n'est en fait pas possible de charger des propriétés à partir d'un fichier en utilisant les instructions de la réponse acceptée car ces propriétés ne sont pas disponibles dans le fichier pom bien qu'elles puissent être utilisées pour le filtrage. Exemple de compteur minimal:
Dans pom.xml:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<!-- Associate the read-project-properties goal with the initialize phase, to read the properties file. -->
<execution>
<!-- Apart from this test, the phase must be initialize -->
<phase>validate</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>dev.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<echo>Displaying value of properties</echo>
<echo>[foo] ${foo}</echo>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Ayant dans dev.properties
:
foo=bar
Exécutez ensuite la commande mvn validate
produit une sortie:
[echo] Displaying value of properties
[echo] [foo] bar