Maven:在生命周期阶段之间传递系统属性

时间:2013-12-04 21:22:59

标签: java maven properties maven-plugin lifecycle

我对Maven不是很熟悉,所以我很难完成这件事:

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

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

提前感谢您的帮助。

4 个答案:

答案 0 :(得分:2)

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

有关配置插件的信息,请参阅usage

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

此外,每个插件都在它自己的上下文中运行(同样,我相信它自己的类加载器)。因此,您对属性所做的更改只会在插件的范围内显示(我相信同一插件的不同<execution/> - s可以共享这些属性,但这需要进行双重检查。

答案 3 :(得分:1)

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

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

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