Maven 2.1.0 no transfiere las propiedades del sistema a la máquina virtual Java
-
05-07-2019 - |
Pregunta
Usamos la línea de comando para pasar las propiedades del sistema a Java máquina virtual al ejecutar nuestras Hudson se basa en una caja de Linux. Solía funcionar bastante bien en 2.0.9 desde que actualizamos a 2.1.0 tiene dejó de funcionar por completo. Las propiedades del sistema nunca lo hacen 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 fallará:
mvn2.1 -Dsystem.test.property=test test
El código Java simplemente hace esto
assertTrue( System.getProperty("system.test.property") != null);
Solución
No creo que esto sea un problema en el complemento Maven o Surefire. De lo contrario, el surefire se comporta de manera diferente. Parece que ahora, cuando Surefire bifurca las JVM , no tomará todas las propiedades del sistema del padre JVM
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"
Otros consejos
He experimentado esto con el Surefire . El complemento Surefire se ejecuta en una instancia de JVM diferente que Maven lanza. Los parámetros de la línea de comandos son configurables bajo la configuración de plugin surefile 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>
Tenga cuidado de no mezclar el archivo de configuración con los argumentos de la línea de comandos. El archivo de configuración (pom.xml) anula todos los argumentos de cmd. Por lo tanto, no configure el complemento surefire dentro de pom.xml si desea pasarlo a través de la línea de comandos como se explica en raisercostin.