web-dev-qa-db-fra.com

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

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?

31
Arek

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>
36
Vineet Reynolds

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 ...

10
gavenkoa

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
7