【问题标题】:Maven: passing system properties between lifecycle phasesMaven:在生命周期阶段之间传递系统属性
【发布时间】:2013-12-04 21:22:59
【问题描述】:

我对 Maven 还不是很熟悉,所以我很难完成这项工作:

我正在使用 exec-maven-plugin 在process-test-classes 阶段通过System.setProperty() 方法设置一些系统属性。它们都设置正确。但是当下一阶段(测试阶段)开始时,我再次列出它们(使用properties.list(System.out)),它们都消失了。

所以我的问题是:有没有办法在进入另一个生命周期阶段时不丢失它们?

提前感谢您的帮助。

【问题讨论】:

  • 我也是 Maven 的新手,但您确定这就是您列出它们的方式吗?
  • 我很确定可以通过这种方式实现。

标签: java maven properties maven-plugin lifecycle


【解决方案1】:

您可以使用Maven Properties Plugin 来设置属性。该插件可以从属性文件中读取属性并设置环境属性以供您在其他地方使用。

插件配置见usage

【讨论】:

    【解决方案2】:

    将值作为变量放在pom中,在所有需要的地方引用该变量。 exec-maven-plugin 在它自己的上下文中开始和结束。下一个目标不会有相同的背景。

    【讨论】:

    • 在 pom 中放置变量对我来说不是一个选项。它们是在 process-test-resources 阶段从复制到 test-classes/ 的文件中加载的。您提到的这种上下文是否与在测试阶段分叉 VM 有一些共同点?
    • 为什么不能将它们从该文件加载到 pom 中?
    【解决方案3】:

    如果您使用 maven-surefire-plugin 进行测试(这是您默认使用的),您可能会分叉测试。分叉测试在单独的 JVM 中运行,并且 JVM 属性不会传递给它,除非您明确这样做。

    有关分叉的更多详细信息,请参阅here

    此外,每个插件都在它自己的上下文中运行(而且,我相信它有自己的类加载器)。因此,您对属性所做的更改将仅在插件范围内可见(我相信同一插件的不同<execution/>-s 可以共享这些属性,但这需要仔细检查。

    【讨论】:

      【解决方案4】:

      我也遇到了问题:一个插件设置了系统道具,而在测试时它们没有设置。

      所以,我制作了第一个用于设置 maven 项目属性的插件。并制作了surefire插件以在测试阶段将它们读入系统属性(使用'systemPropertyVariables'参数)。

      希望它有所帮助,但我不知道 exec-maven-plugin,所以也许这个技巧不会对你有用。

      【讨论】:

        猜你喜欢
        • 2011-12-23
        • 1970-01-01
        • 1970-01-01
        • 2019-09-28
        • 2013-05-05
        • 2016-08-05
        • 1970-01-01
        • 2021-01-25
        • 2015-11-20
        相关资源
        最近更新 更多