从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]用于系统属性,而不是环境变量。
你有两个选择:
-
如果要使用环境变量,
my_parameter1
在启动Maven之前使用特定于操作系统的方法设置环境变量my_parameter1
。 在Windows中,使用set my_parameter1=
,在’nix中使用export my_parameter1=
。 -
您可以使用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模式运行 ,这是默认设置。