2011-08-22 17 views
29

tengo el archivo Maven POM con una cierta configuración y en la sección de plugins, tengo Tomcat experto plugin con una configuración como esta:propiedades de lectura del archivo de Maven POM presentar

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

me gustaría exportar configuración url a algún archivo de propiedades, por ejemplo, tomcat.properties con esa clave:

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

Y cómo puedo leer esta clave de vuelta en mi archivo POM?

Respuesta

32

Maven le permite definir propiedades en el POM del proyecto. Para ello, puede utilizar un archivo POM similar al siguiente:

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

Usted puede evitar especificando la propiedad dentro de la etiqueta properties, y pasar el valor de la línea de comandos como:

mvn -Dserver.url=http://localhost:8080/manager/html some_maven_goal 

Ahora, si no desea especificarlos desde la línea de comandos y si necesita aislar aún más estas propiedades del POM del proyecto, en un archivo de propiedades, necesitará usar el Properties Maven plugin, y ejecutarlo como objetivo read-project-properties en el initialize phase of the Maven lifecycle . El ejemplo de la página del plugin se reproduce aquí:

<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> 
+0

Esto funciona !! .. ¡¡Gracias!! –

4

En realidad no es posible cargar las propiedades de un archivo siguiendo las instrucciones de la respuesta aceptada ya que estas propiedades no están disponibles en el archivo pom pesar de que se pueden utilizar para filtrar contraejemplo mínimo:

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

Teniendo en dev.properties:

foo=bar 

A continuación, corriendo el comando mvn validate produce una salida:

[echo] Displaying value of properties 
[echo] [foo] bar 
+0

Falla en la cadena ** [echo] [foo] $ {foo} **. Grrr .... – gavenkoa

+0

Eso es porque ** validate ** ejecutado antes de ** inicializar **. – gavenkoa

+0

@gavenkoa ¿podría explicarme cómo fallo en esa cadena? –

8

ejemplo de trabajo completa disponible en: http://hg.defun.work/exp/file/tip/maven/properties

parte esencial de Aquí 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> 

Como se puede ver propiedades-maven-plugin de todavía en alfa etapa, es por eso que odio Maven como herramientas de construcción. ..

Cuestiones relacionadas