从maven传递一个java参数

时间:2012-03-08 17:35:17

标签: java maven

我需要使用maven执行一些测试,并从命令行传递一个参数。

我的java代码应该获取参数: System.getenv( “my_parameter1”);

我在pom.xml文件中定义参数,如下例所示: (后者,我修改pom.xml以从公共行获取参数mvn clean install -Dmy_parameter1 = value1)

但它不起作用; System.getenv(“my_parameter1”)返回null。 我应该如何在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>

3 个答案:

答案 0 :(得分:17)

System.getenv()读取环境变量,例如PATH。您想要的是读取系统属性。 -D [系统属性名称] = [value]用于系统属性,而不是环境变量。

您有两种选择:

  1. 如果要使用环境变量,请在启动Maven之前使用特定于操作系统的方法设置环境变量my_parameter1。在Windows中,使用{nix使用set my_parameter1=<value>。{/ p>

  2. 中的export my_parameter1=<value>
  3. 您可以使用System.getProperty()从代码中读取系统属性值。

  4. 示例:

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

    在surefire插件配置中,您可以使用:

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

    它采用Maven属性_my_property1_并在测试中设置它。

    有关此here的详细信息。

    我不确定Maven的系统属性是否会自动传递给测试和/或fork模式是否影响是否会发生这种情况,因此明确传递它们可能是个好主意。

答案 1 :(得分:3)

使用

${env.my_parameter} 

访问pom.xml中的环境变量。

您可以使用帮助插件查看使用

设置的变量
mvn help:system

然而,正常的属性使用也应该起作用。然而,在大背景下,我想知道......你想做什么?可能有一个更简单的解决方案。

答案 2 :(得分:2)

maven surefire插件还有一个option to set environment variables,只需将其添加到您的插件配置中。

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

我认为这需要插件以fork mode运行,这是默认设置。