【问题标题】:Setting properties via Maven command line通过 Maven 命令行设置属性
【发布时间】:2016-04-15 11:20:21
【问题描述】:

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

我不太了解这种行为。有人能启发我吗?

【问题讨论】:

    标签: java maven properties maven-surefire-plugin


    【解决方案1】:

    是的,你应该有

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

    注意在argLine 中添加了-D

    让我们解释一下原因。 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 属性。您正在添加系统属性。

    【讨论】:

      【解决方案2】:

      关于您配置测试的方法

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

      Maven 命令行参数的推荐用法是为构建配置 Maven 插件、构建环境和 Java 配置。 尽可能少地使用功能、配置和插件。否则您将面临大量问题,并且调整所有您想要的标准化构建不意味着 sh*t-for-me-Gradle 会感觉更舒服.

      【讨论】:

      • 这里的配置文件不会过分吗?我只想设置java.util.logging.config.class 属性来控制我的应用程序所依赖的第三方库的日志记录输出。
      • 如果命令行参数是“让东西在你的计算机上工作”,那就去吧。但是,如果该代码打算在其他地方运行;您必须提供非常详细的说明来添加命令行选项。即使将这样的配置放在 pom 中也是一种气味。我以前没有解决过这个特殊问题,但是像 SLF4J 这样的日志记录可能会从异构日志框架中解决问题。
      猜你喜欢
      • 1970-01-01
      • 2013-06-24
      • 2016-01-12
      • 2017-09-25
      • 2010-10-19
      • 2021-05-03
      • 2016-02-19
      • 2017-07-13
      • 1970-01-01
      相关资源
      最近更新 更多