我很困惑在使用Maven时通过命令行为某些单元测试设置属性的正确方法.有一些问题(如指定Maven的内存参数没有设置MAVEN_OPTS环境变量,有没有办法通过命令行传递JVM参数传递给Maven的?,如何设置JVM参数JUnit测试?)在这个问题上的那一抹但没有人能找到我想要的答案.
我想将属性设置java.util.logging.config.class
为某个值,但我不想设置MAVEN_OPTS
环境变量.
我可以使用属性在我的pom文件中配置surefire插件:
-Djava.util.logging.config.class=someClass
这样每次运行测试阶段时都会设置它.
但是,如果我从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
我真的不明白这种行为.有人可以开导我吗?
是的,你应该有
mvn package -DargLine="-Djava.util.logging.config.class=someClass"
请注意添加-D
内部argLine
.
我们来解释一下原因.argLine
确实是maven-surefire-plugin
具有相应用户属性的属性argLine
.这意味着您可以直接在命令行上设置此属性-DargLine
.但是,那个属性的价值是-Djava.util.logging.config.class=someClass
.这正是您在POM中直接配置插件时所拥有的
-Djava.util.logging.config.class=someClass
另外,当你打电话
mvn package -Djava.util.logging.config.class=someClass
那你就是没有设置argLine
属性.您正在添加系统属性.