通过Maven命令行设置属性

时间:2016-01-11 08:02:40

标签: java maven properties maven-surefire-plugin

在使用Maven时,我对通过命令行为某些单元测试设置属性的正确方法感到困惑。有许多问题(例如Specifying Maven memory parameter without setting MAVEN_OPTS environment variableIs there a way to pass jvm args via command line to maven?How to set JVM parameters for Junit Unit Tests?)涉及此主题,但没有一个问题我正在寻找答案。

我想将属性java.util.logging.config.class设置为某个值,但我不想设置MAVEN_OPTS环境变量。

我可以使用属性

在我的pom文件中配置surefire插件
<argLine>-Djava.util.logging.config.class=someClass</argLine>

以便每次运行测试阶段时都会设置它。

但是,如果我从pom文件中删除该设置并将以下内容添加到命令行:

mvn package -DargLine="java.util.logging.config.class=someClass"

然后报告测试阶段中的以下错误并且构建失败:

  

错误:无法找到或加载主类java.util.logging.config.class = someClass

如果我从命令行运行以下命令:

mvn package -Djava.util.logging.config.class=someClass

然后在构建开始时报告以下错误,但构建和测试成功:

  

记录配置类“someClass”失败       java.lang.ClassNotFoundException:someClass

我真的不了解这种行为。有人可以开导我吗?

2 个答案:

答案 0 :(得分:9)

是的,你应该

mvn package -DargLine="-Djava.util.logging.config.class=someClass"

请注意-D内添加了argLine

让我们来解释原因。 argLine确实是maven-surefire-plugin的一个属性,具有相应的用户属性argLine。这意味着您可以使用-DargLine直接在命令行上设置此属性。但是,该属性的值为-Djava.util.logging.config.class=someClass。这正是您使用

直接在POM中配置插件时的功能
<argLine>-Djava.util.logging.config.class=someClass</argLine>

此外,当您致电

mvn package -Djava.util.logging.config.class=someClass

然后您没有设置argLine属性。您正在添加系统属性。

答案 1 :(得分:1)

关于配置测试的方法

如果要将配置传递给测试,请使用例如src / test / resources / myTestConfig.xml中的文件。或使用Test-ng的增强功能。您的测试对集中构建服务器或那些想要运行/测试代码的人没有任何价值,其中配置值无法(轻松)更改。

Maven的命令行参数的推荐用法是为构建配置Maven插件,构建环境和Java配置。 尽可能使用少量功能,配置和插件。或者你将面临大量的问题,并且调整所有你想要的A标准化构建并不是为了我 - { - 3会觉得更舒服。