从maven传递一个java参数

我需要用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

 ...    value1     org.apache.maven.plugins maven-surefire-plugin   slowTest test  test   false  **/*Test.java **/*TestSlow.java   value1           

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

你有两个选择:

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

  2. 您可以使用System.getProperty()从代码中读取系统属性值。

例:

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

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

   ${my_property1}   

它接受Maven属性_my_property1_并在测试中设置它。

关于这里的更多细节。

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

使用

 ${env.my_parameter} 

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

您可以使用帮助插件查看设置的变量

 mvn help:system 

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

maven surefire插件还有一个设置环境变量的选项 ,只需将其添加到您的插件配置中即可。

  value  

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