Maven failsafe插件 - 在预集成测试中传播由maven插件设置的系统属性

时间:2013-05-15 09:59:23

标签: maven maven-plugin

我遇到了以下问题,无法在其他地方找到任何答案:

我正在使用https://github.com/joelittlejohn/embedmongo-maven-plugin在预集成测试阶段启动mongo db服务器,然后运行与指定端口上的mongo db交互的集成测试。然而,对于插件的原始版本,我被迫在插件配置中硬编码端口,这可能与在同一台机器上运行的其他一些进程发生冲突,并且有效地拒绝使用相同端口的模块的并行执行。

因此我准备了一个补丁https://github.com/jumarko/embedmongo-maven-plugin/compare/jma-random-port,使我能够在随机端口上启动mongo db。 但是,我无法将分配的端口(在预集成测试阶段由插件分配)传递给在集成测试阶段在分叉JVM中运行的集成本身(请参阅https://github.com/jumarko/embedmongo-maven-plugin/blob/3462a909b546eab6afe1f87691ac49336ddab845/src/test/java/com/github/joelittlejohn/embedmongo/MongoIT.java)。

我尝试将已分配的端口设置为系统属性(https://github.com/jumarko/embedmongo-maven-plugin/compare/jma-random-port#L1R201),但此属性不会传播到分叉的JVM。作为一种解决方法,我甚至尝试在故障安全插件配置(https://github.com/jumarko/embedmongo-maven-plugin/compare/jma-random-port#L0R104)中设置此属性,但它没有任何效果(我想在embedmongo-plugin实际设置之前发生了有效的解决)。

有没有办法如何在运行时(通过embedmongo-maven-plugin)动态地将系统属性集传播到用于集成测试执行的分叉JVM? 是否有任何(可能更好的)替代方法如何将mongo db运行的端口传递给集成测试本身?

注意:如果failafe插件forkMode设置为never,则集成测试能够访问系统属性,但这对我来说不是一个选项。

1 个答案:

答案 0 :(得分:0)

在插件中,您可以使用 AbstractMojo.project 字段设置将传播到failsafe插件配置的项目属性:

project.getProperties().put(propertyName,propertyValue);

我对一个工作项目做了这件事,它做了你想做的事。

所以,如果你已经运行

project.getProperties().put("the.port", 1234) 
在mojo中

然后您将能够在故障安全配置中使用属性$ {the.port}。