2009-05-05 13 views
38

Usamos la línea de comando para pasar las propiedades del sistema a la máquina virtual Java al ejecutar nuestras compilaciones Hudson en una caja Linux. Usó para funcionar bastante bien en 2.0.9 desde que nos actualizamos a 2.1.0 tiene dejó de funcionar por completo. Las propiedades del sistema simplemente nunca lo convierten en en la máquina virtual Java.Maven 2.1.0 no transfiere propiedades del sistema 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 va a fallar:

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

El código Java se limita a este

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

Respuesta

52

I don' Creo que esto es 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 el 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. Así, tanto éstos deben trabajar

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

o

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

"argLine" era justo lo que estaba buscando! ¡Muchas gracias! – armandino

+0

sorprendentemente para Locale.getDefault() estos funcionaron mvn test -DargLine = "- Duser.language = de -Duser.region = DE" y no el mvn test -DargLine = "- Dsystem.user.language = de - Dsystem.user.region = DE " – bibstha

+3

Tenga en cuenta que vor maven 3 solo utiliza' mvn -Dsystem.test.property = test test'. Maven propagetes la propiedad a las pruebas. – BetaRide

12

que he experimentado esto con el plug-in 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> 
+4

Hoy en día, use en lugar de . Ver http://maven.apache.org/plugins/maven-surefire-plugin/examples/system-properties.html –

+0

He intentado esto, y $ {...} no parece ser reemplazado por la propiedad valor pasado a maven ... – thecoop

+0

@thecoop - no estoy seguro de cuál es el problema, podría ser una falta de ortografía en alguna parte, pero esto funcionó bastante bien para mí. –

2

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 plugin surefire dentro de pom.xml si desea pasarlo a través de la línea de comando como se explicó en raisercostin.

Cuestiones relacionadas