Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

pass a java parameter from maven

Tags:

java

maven

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>
like image 549
David Portabella Avatar asked Mar 08 '12 17:03

David Portabella


2 Answers

Use

${env.my_parameter} 

to access the environment variable in the pom.xml.

You can use the help plugin to see which variables are set with

mvn help:system

However the normal properties usage should work too. In the large context however I am wondering... what do you want to do? There might be a simpler solution.

like image 198
Manfred Moser Avatar answered Oct 20 '22 07:10

Manfred Moser


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:

  1. If you want to use environment variables, use the OS-specific method of setting the environment variable my_parameter1 before you launch Maven. In Windows, use set my_parameter1=<value>, in 'nix use export my_parameter1=<value>.

  2. You can use System.getProperty() to read the system property value from within your code.

example:

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

In you surefire plugin configuration, you can use:

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

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.

like image 20
prunge Avatar answered Oct 20 '22 06:10

prunge