2012-03-08 23 views
6

Ho bisogno di eseguire alcuni test con Maven e passare un parametro dalla riga di comando.passare un parametro java da Maven

Il mio codice java dovrebbe ottenere i parametri come: System.getenv ("mio_parametro1");

ed io definisco il parametro nel file pom.xml come nell'esempio qui sotto: (e quest'ultimo, mi piacerebbe modifico il pom.xml per ottenere il parametro dalla linea mvn comune installazione pulita -Dmy_parameter1 = valore1)

ma non funziona; System.getenv ("my_parameter1") restituisce null. come devo definire il parametro nel file 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> 

risposta

16

System.getenv() legge variabili di ambiente, ad esempio PATH. Quello che vuoi è leggere una proprietà di sistema . Il -D [nome proprietà sistema] = [valore] è per le proprietà di sistema, non per le variabili di ambiente.

si hanno due opzioni:

  1. Se si desidera utilizzare le variabili di ambiente, utilizzare il metodo specifico per OS di impostare la variabile d'ambiente my_parameter1 prima di lanciare Maven. In Windows, utilizzare set my_parameter1=<value>, in 'nix usare export my_parameter1=<value>.

  2. È possibile utilizzare System.getProperty() per leggere il valore della proprietà di sistema dal codice.

esempio:

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

In te configurazione del plugin infallibile, è possibile utilizzare:

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

che prende il _my_property1_ proprietà Maven e imposta anche nei test.

Maggiori dettagli su questo here.

Non sono sicuro che le proprietà di sistema di Maven vengano passate automaticamente ai test e/o se la modalità di fork influenzi se ciò accade, quindi è probabilmente una buona idea passarle esplicitamente.

+1

Appena controllato: le proprietà del sistema Maven sono * non * trasferite automaticamente ai test. – SiKing

2

Usa

${env.my_parameter} 

per accedere alla variabile di ambiente nella pom.xml.

È possibile utilizzare l'aiuto plugin per vedere quali variabili sono impostate con

mvn help:system 

Tuttavia l'utilizzo normali proprietà dovrebbe funzionare anche. Nel contesto ampio, tuttavia, mi chiedo ... cosa vuoi fare? Potrebbe esserci una soluzione più semplice.

2

Il plugin maven surefire ha anche un option to set environment variables, basta aggiungere questo alla configurazione del plugin.

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

penso che questo richiede che il plugin funziona in fork mode, che è il default.

+0

+1 per la modalità fork ... Non è scritto nel doc. – JSlain

Problemi correlati