I need to execute some tests with maven, and pass a parameter from the command line.
My java code should get the parameter as:
System.getenv(“my_parameter1”);
and I define the parameter in the pom.xml file as the example below:
(and latter, I’d modify the pom.xml to get the parameter from the common line mvn clean install -Dmy_parameter1=value1)
but it does not work; System.getenv(“my_parameter1”) returns null.
how should I define the parameter in the pom.xml file?
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>
System.getenv() reads environment variables, such as
PATH. What you want is to read a system property instead. The -D[system property name]=[value] is for system properties, not environment variables.You have two options:
If you want to use environment variables, use the OS-specific method of setting the environment variable
my_parameter1before you launch Maven. In Windows, useset my_parameter1=<value>, in ‘nix useexport my_parameter1=<value>.You can use System.getProperty() to read the system property value from within your code.
example:
In you surefire plugin configuration, you can use:
Which takes the Maven property _my_property1_ and sets it also in your tests.
More details about this here.
I’m not sure if system properties from Maven are automatically passed to tests and/or whether fork mode affects whether this happens, so it’s probably a good idea to pass them in explicitly.