2012-03-08 20 views
6

Necesito ejecutar algunas pruebas con maven, y paso un parámetro desde la línea de comando.pase un parámetro de java desde maven

Mi código de Java debería tener el parámetro como: System.getenv ("my_parameter1");

y defino el parámetro en el archivo pom.xml como el ejemplo siguiente: (y este último, me gustaría modificar el pom.xml para obtener el parámetro de la línea común mvn instalación limpia -Dmy_parameter1 = valor1)

pero no funciona; System.getenv ("my_parameter1") devuelve null. ¿cómo debo definir el parámetro en el archivo pom.xml?

pom.xml

<project> 
    ... 
    <profiles> 
    <profile> 
     <properties> 
     <my_parameter1>value1</my_parameter1> 
     </properties> 
     <build> 
     <plugins> 
      <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <executions> 
       <execution> 
       <id>slowTest</id> 
       <phase>test</phase> 
       <goals> 
        <goal>test</goal> 
       </goals> 
       <configuration> 
        <skip>false</skip> 
        <includes> 
        <include>**/*Test.java</include> 
        <include>**/*TestSlow.java</include> 
        </includes> 
        <properties> 
        <my_parameter1>value1</my_parameter1> 
        </properties> 
       </configuration> 
       </execution> 
      </executions> 
      </plugin> 
     </plugins> 
     </build> 
    </profile> 
    </profiles> 
</project> 

Respuesta

16

System.getenv() lee variables de entorno, como PATH. Lo que desea es leer una propiedad del sistema en su lugar. El -D [nombre de propiedad del sistema] = [valor] es para las propiedades del sistema, no para las variables de entorno.

tiene dos opciones:

  1. Si desea utilizar variables de entorno, utilice el método específico del SO de la variable de entorno my_parameter1 antes de iniciar Maven. En Windows, use set my_parameter1=<value>, en 'nix use export my_parameter1=<value>.

  2. Puede usar System.getProperty() para leer el valor de la propiedad del sistema dentro de su código.

ejemplo:

String param = System.getProperty("my_parameter1"); 

En ti configuración del plugin de éxito seguro, puede utilizar:

<configuration> 
    <systemPropertyVariables> 
     <my_property1>${my_property1}</my_property1> 
    </systemPropertyVariables> 
</configuration> 

que tiene la propiedad _my_property1_ Maven y lo pone también en sus pruebas.

Más detalles sobre el here.

No estoy seguro de si las propiedades del sistema de Maven se pasan automáticamente a las pruebas y/o si el modo fork afecta si esto sucede, por lo que es una buena idea pasarlas explícitamente.

+1

Just checked: las propiedades del sistema Maven * no * se pasan automáticamente a las pruebas. – SiKing

2

Uso

${env.my_parameter} 

para acceder a la variable de entorno en el pom.xml.

Puede utilizar el plugin de ayuda para ver qué variables se establecen con

mvn help:system 

Sin embargo, el uso de las propiedades normales debería funcionar también. En el contexto general, sin embargo, me pregunto ... ¿qué quieres hacer? Puede haber una solución más simple.

2

El plugin maven surefire también tiene un option to set environment variables, simplemente agréguelo a la configuración de su plugin.

<environmentVariables> 
    <my_parameter1>value</my_parameter1> 
</environmentVariables> 

creo que esto requiere que el plugin funciona en fork mode, que es el valor predeterminado.

+0

+1 para el modo de horquilla ... No está escrito en el documento. – JSlain

Cuestiones relacionadas