当前位置: 首页 > 面试题库 >

通过Maven命令行设置属性

章涵容
2023-03-14
问题内容

我对使用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"

请注意在中添加-DargLine

让我们解释一下原因。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语句? 试图避免这种情况: 我以为我看到了一个例子,该例子之后有人使用一个引号引起来的字符串,但是我再也找不到该例子了。 问题答案: 答案是否定的。您可能已经看到了一个示例,其中有人会设置如下内容: 然后,应用程序将解析属性字符串的值以获得单个值。在您中,您可以将键值设为(假设可以保证输入格式): 另外