我对使用Maven时通过命令行为某些单元测试设置属性的正确方法感到困惑。有很多问题(例如,在不设置MAVEN_OPTS环境变量的情况下指定Maven内存参数,是否可以通过命令行将jvmargs传递给maven,如何为Junit单元测试设置JVM参数?)碰到这个问题,但是没有人正在寻找我的答案。
我想将属性设置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
我不太了解这种行为。有人可以启发我吗?
是的,你应该有
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
属性。您正在添加系统属性。
问题内容: 如何在Maven中使用?如何使用它设置一个(或多个)属性? 有什么官方文章吗? 我找不到一个。谢谢。 问题答案: 通过命令行使用来设置属性的正确方法是: 如果中不存在,它将被设置。 如果中已经存在,则其值将被通过作为参数传递的那个值 覆盖。 要发送 多个变量 ,请使用多个以空格分隔的: 您可以在《Maven:完整参考》中查看有关属性的更多详细信息。更具体地说,在 6.1 节中 。 Ma
问题内容: 可以在调用“ java jar jar_name.jar”时指定要使用的JVM。我的机器上安装了两个JVM。我无法更改JAVA_HOME,因为它可能会破坏所有准备就绪的代码。 亲切的问候 史提芬 问题答案: 是的-仅显式提供java.exe的路径。例如: 对于正在运行的命令外壳,最简单的方法是: 例如,这是一个完整的会话,显示我的默认JVM,然后是路径的更改,然后是新的: 但是,这不会
我需要根据Spring Boot Maven应用程序中的环境细节激活配置文件。我在设置中配置了配置文件。xml 我尝试通过激活配置文件使用命令 但是配置文件没有正确激活。但是它是通过添加标签来工作的。 但是我需要激活特定环境的配置文件 我们可以通过任何方式将参数传递给设置中的。xml文件?类似于此 参考: 如何从命令行激活配置文件? 通过Maven在SpringBoot中配置活动配置文件 http
但没有效果(全名为空)。 帮助中提到,只有在“常规设置->编译器变量”步骤中定义的变量才能像这样被重写。 这是否意味着我必须创建一个额外的“中间”编译器变量,并将其放在的全名字段中?
问题内容: 我想使用通过命令行传递的自定义版本来构建JAR,例如: 当我执行gradle构建任务时,如下所示: 应该生成myproject-1.0.jar。 我尝试将下面的行添加到 build.gradle ,但是没有用: 问题答案: 您无法从命令行覆盖现有项目属性,请在此处查看。因此,请尝试将版本变量重命名为不同于版本的变量,并在命令前使用flag进行设置,例如: 然后在您的build.grad
问题内容: 有没有一种简单的方法可以在命令行上为Java程序指定多个系统属性,而不是具有多个-D语句? 试图避免这种情况: 我以为我看到了一个例子,该例子之后有人使用一个引号引起来的字符串,但是我再也找不到该例子了。 问题答案: 答案是否定的。您可能已经看到了一个示例,其中有人会设置如下内容: 然后,应用程序将解析属性字符串的值以获得单个值。在您中,您可以将键值设为(假设可以保证输入格式): 另外