Lecture du fichier de propriétés à partir du fichier Maven POM

J'ai le fichier Maven POM avec une certaine configuration et dans la section plugins, j'ai le plugin Maven tomcat avec une certaine configuration comme ceci:

<configuration>
   <url>http://localhost:8080/manager/html</url>
   <server>tomcat</server>
</configuration>

Je voudrais exporter le paramètre d'url vers un fichier de propriétés par exemple tomcat.propriétés avec cette clé:

url=http://localhost:8080/manager/html

Et comment puis-je lire cette clé dans mon fichier POM?

29
demandé sur rohanagarwal 2011-08-22 12:06:07

3 réponses

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 à ce qui suit:

<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 passer 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 projet POM, dans un fichier de propriétés, alors vous devrez utiliser le plugin Properties Maven , et exécuter c'est l'objectif read-project-properties dans la 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>
34
répondu Vineet Reynolds 2011-08-22 09:11:59

Exemple de travail complet disponible à l'adresse: http://hg.defun.travail/exp/fichier/tip/maven/propriétés

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 propriétés-maven-plugin encore à alpha étape, c'est pourquoi je déteste Maven comme outils de construction...

8
répondu gavenkoa 2016-02-06 14:53:48

Il n'est pas réellement 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

Ensuite, exécutez la commande mvn validate produit la sortie:

 [echo] Displaying value of properties
 [echo] [foo] bar
4
répondu Daniel Thomas - drt24 2016-02-06 09:26:38