java - pom - maven-dependency-plugin example
Lectura del archivo de propiedades del archivo Maven POM (3)
Ejemplo de trabajo completo disponible en: http://hg.defun.work/exp/file/tip/maven/properties
Aquí parte esencial 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>
Como puede ver propiedades-maven-plugin todavía en fase alfa , es por eso que odio a Maven como herramientas de compilación ...
Tengo el archivo Maven POM con alguna configuración y en los complementos de la sección, tengo el plugin maven tomcat con alguna configuración como esta:
<configuration>
<url>http://localhost:8080/manager/html</url>
<server>tomcat</server>
</configuration>
Me gustaría exportar la configuración de url a algún archivo de propiedad, por ejemplo tomcat.properties con esa clave:
url=http://localhost:8080/manager/html
¿Y cómo puedo leer esta clave en mi archivo POM?
En realidad, no es posible cargar propiedades de un archivo usando las instrucciones en la respuesta aceptada, ya que estas propiedades no están disponibles en el archivo pom, aunque se pueden usar para filtrar. Ejemplo de contador 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>
Tener en dev.properties
:
foo=bar
Luego ejecutando el comando mvn validate
produce salida:
[echo] Displaying value of properties
[echo] [foo] bar
Maven le permite definir propiedades en el POM del proyecto. Puede hacer esto usando 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>
Puede evitar especificar la propiedad dentro de la etiqueta de properties
y pasar el valor desde la línea de comando 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 plugin Propiedades Maven y ejecutar su read-project-properties
en la fase de inicialización del ciclo de vida de Maven . El ejemplo de la página del complemento 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>