Environment Variable with Maven Environment Variable with Maven java java

Environment Variable with Maven


You can just pass it on the command line, as

mvn -DmyVariable=someValue install

[Update] Note that the order of parameters is significant - you need to specify any options before the command(s).[/Update]

Within the POM file, you may refer to system variables (specified on the command line, or in the pom) as ${myVariable}, and environment variables as ${env.myVariable}. (Thanks to commenters for the correction.)

Update2

OK, so you want to pass your system variable to your tests. If - as I assume - you use the Surefire plugin for testing, the best is to specify the needed system variable(s) within the pom, in your plugins section, e.g.

<build>    <plugins>        ...        <plugin>            <groupId>org.apache.maven.plugins</groupId>            <artifactId>maven-surefire-plugin</artifactId>            ...            <configuration>                ...                <systemPropertyVariables>                    <WSNSHELL_HOME>conf</WSNSHELL_HOME>                </systemPropertyVariables>            </configuration>        </plugin>        ...    </plugins></build>


The -D properties will not be reliable propagated from the surefire-pluging to your test (I do not know why it works with eclipse). When using maven on the command line use the argLine property to wrap your property. This will pass them to your test

mvn -DargLine="-DWSNSHELL_HOME=conf" test

Use System.getProperty to read the value in your code. Have a look to this post about the difference of System.getenv and Sytem.getProperty.


You could wrap your maven command in a bash script:

#!/bin/bashexport YOUR_VAR=thevaluemvn testunset YOUR_VAR