maven-2 system-properties

maven 2 - Especificar propiedad del sistema para el proyecto Maven



maven-2 system-properties (4)

¿Hay alguna manera (es decir, cómo puedo) establecer una propiedad del sistema en un proyecto maven?

Quiero acceder a una propiedad de mi prueba y mi aplicación web (que se ejecuta localmente) y sé que puedo usar una propiedad del sistema Java.

¿Debería poner eso en ./settings.xml o algo así?

Contexto

Tomé un proyecto de código abierto y logré cambiar la configuración de db para usar JavaDB

Ahora, en la url jdbc para JavaDB, la ubicación de la base de datos podría especificarse como la ruta completa (ver: esta otra pregunta )

O una propiedad del sistema: derby.system.home

Ya tengo el código funcionando, pero actualmente está todo codificado para:

jdbc:derby:/Users/oscarreyes/javadbs/mydb

Y quiero eliminar la ruta completa, dejarla así:

jdbc:derby:mydb

Para hacer eso, necesito especificar la propiedad del sistema ( derby.system.home ) para maven, pero no sé cómo.

La prueba se realiza usando junit (no veo ningún complemento en pom.xml) y la aplicación web se ejecuta con el plugin jetty.

Especificar la propiedad del sistema en la línea de comando parece funcionar para embarcadero, pero no estoy seguro si eso es algo práctico (si se concede que otros usuarios lo ejecuten desde eclipse / idea / lo que sea)


¿Hay alguna manera (es decir, cómo puedo) establecer una propiedad del sistema en un proyecto maven? Quiero acceder a una propiedad de mi prueba [...]

Puede configurar las propiedades del sistema en la configuración de Maven Surefire Plugin (esto tiene sentido ya que las pruebas se bifurcan de forma predeterminada). Desde el uso de las propiedades del sistema :

<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.5</version> <configuration> <systemPropertyVariables> <propertyName>propertyValue</propertyName> <buildDirectory>${project.build.directory}</buildDirectory> [...] </systemPropertyVariables> </configuration> </plugin> </plugins> </build> [...] </project>

y mi aplicación web (ejecutándose localmente)

No estoy seguro de lo que quiere decir aquí, pero supongo que el contenedor de aplicaciones web es iniciado por Maven. Puede pasar las propiedades del sistema en la línea de comando usando:

mvn -DargLine="-DpropertyName=propertyValue"

Actualización: Ok, lo tengo ahora. Para Jetty, también debería poder establecer las propiedades del sistema en la configuración de Maven Jetty Plugin. Desde configurar las propiedades del sistema :

<project> ... <plugins> ... <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <configuration> ... <systemProperties> <systemProperty> <name>propertyName</name> <value>propertyValue</value> </systemProperty> ... </systemProperties> </configuration> </plugin> </plugins> </project>


He aprendido que también es posible hacer esto con el complemento exec-maven si estás haciendo una aplicación java "independiente".

<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>${maven.exec.plugin.version}</version> <executions> <execution> <goals> <goal>java</goal> </goals> </execution> </executions> <configuration> <mainClass>${exec.main-class}</mainClass> <systemProperties> <systemProperty> <key>myproperty</key> <value>myvalue</value> </systemProperty> </systemProperties> </configuration> </plugin>


Si su prueba y su aplicación web están en el mismo proyecto Maven, puede usar una propiedad en el POM del proyecto. Luego puede filtrar ciertos archivos que le permitirán a Maven establecer la propiedad en esos archivos. Hay diferentes maneras de filtrar, pero la más común es durante la fase de recursos: http://books.sonatype.com/mvnref-book/reference/resource-filtering-sect-description.html

Si la prueba y la aplicación web están en diferentes proyectos de Maven, puede poner la propiedad en settings.xml, que está en su carpeta de repositorio maven (C: / Documents and Settings / username.m2) en Windows. Todavía necesitará usar el filtrado u otro método para leer la propiedad en su prueba y aplicación web.


properties-maven-plugin plugin puede ayudar:

<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>properties-maven-plugin</artifactId> <version>1.0.0</version> <executions> <execution> <goals> <goal>set-system-properties</goal> </goals> <configuration> <properties> <property> <name>my.property.name</name> <value>my.property.value</value> </property> </properties> </configuration> </execution> </executions> </plugin>