maven-2 jvm maven-plugin surefire system-properties

Maven 2.1.0 no transfiere las propiedades del sistema a la máquina virtual Java



maven-2 jvm (3)

Lo he experimentado con el complemento Surefire . El complemento Surefire se ejecuta en una instancia de JVM diferente lanzada por Maven. Los parámetros de línea de comandos se pueden configurar bajo la configuración de plugin seguro en su pom.xml. Aquí hay una muestra de nuestra configuración.

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.4.3</version> <!-- By default, the Surefire Plugin will automatically include all test classes with the following wildcard patterns: "**/Test*.java" - includes all of its subdirectory and all java filenames that start with "Test". "**/*Test.java" - includes all of its subdirectory and all java filenames that end with "Test". "**/*TestCase.java" - includes all of its subdirectory and all java filenames that end with "TestCase". --> <configuration> <includes> <include>**/*Test.java</include> </includes> <systemProperties> <property> <name>app.env</name> <value>dev</value> </property> <property> <name>oracle.net.tns_admin</name> <value>${oracle.net.tns_admin}</value> </property> </systemProperties> </configuration> </plugin>

Usamos la línea de comando para transmitir las propiedades del sistema a la máquina virtual Java al ejecutar nuestras compilaciones Hudson en una caja Linux. Solía ​​funcionar bastante bien en 2.0.9 desde que nos actualizamos a 2.1.0 ha dejado de funcionar por completo. Las propiedades del sistema nunca llegan a la máquina virtual Java.

He creado un pequeño proyecto de prueba y, de hecho, no funciona en absoluto.

Esto debería funcionar bien con Maven 2.0.9:

mvn2.0.9 -Dsystem.test.property=test test

Pero esto fracasará:

mvn2.1 -Dsystem.test.property=test test

El código de Java simplemente hace esto

assertTrue( System.getProperty("system.test.property") != null);


No creo que esto sea un problema en el complemento Maven o Surefire. De lo contrario, el infalible se está comportando de manera diferente. Parece que ahora, cuando Surefire bifurca la JVM , no tomará todas las propiedades del sistema de la JVM primaria.

Es por eso que debe pasar las propiedades del sistema que desee para las pruebas, utilizando argLine. Entonces, ambos deberían funcionar

mvn2.1 -Dsystem.test.property=test test -DforkMode=never

o

mvn2.1 test -DargLine="-Dsystem.test.property=test"


Tenga cuidado de no mezclar el archivo de configuración con los argumentos de la línea de comando. El archivo de configuración (pom.xml) anula todos los argumentos de cmd. Por lo tanto, no configure el plugin surefire dentro de pom.xml si desea pasarlo a través de la línea de comando como se explicó en raisercostin.