2013-05-15 44 views
2

设置我已经有以下问题,无法在其他地方找到任何回答:启动蒙戈DBMaven的故障安全插件 - 传播系统属性通过Maven插件预集成测试

我使用https://github.com/joelittlejohn/embedmongo-maven-plugin服务器,然后运行与指定端口上的mongo db进行交互的集成测试。但是,使用原始版本的插件时,我不得不在插件配置中对端口进行硬编码,这可能会与在同一台计算机上运行的其他进程发生冲突,并有效拒绝并行执行使用相同端口的模块。

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

我试图将分配的端口设置为系统属性(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插件实际设置它之前会进行解析解析)。

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

注意:集成测试能够访问系统属性,如果故障安全插件forkMode设置为从不,但这不是我的选择。

+0

看看[argLine](http://maven.apache.org/surefire/maven-failsafe-plugin/integration-test-mojo.html#argLine)选项是否适合您。为了传播一个系统属性到一个测试中,你通常必须使用'-DargLine =“ - DsomeProp = someValue”'来代替只运行'-D​​someProp = someValue' – FrVaBe

+0

我的问题是我不知道配置时的属性值时间(由运行时插件设置),因此我无法在pom中设置适当的值。 –

+0

如果您使用[$ {env。}](http://maven.apache.org/pom.html#Properties)表示法在surefire插件pom节中配置属性,它可能会起作用。据我了解,系统属性是由插件设置,现在可能可用。 – FrVaBe

回答

0

在你的插件,你可以设置项目属性,将使用AbstractMojo.project场传播到故障安全插件配置:

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

我做的一个工作项目这个确切的事情,它你想要什么。

所以,如果你在魔力运行

project.getProperties().put("the.port", 1234) 

,那么你就可以使用属性$ {} the.port在故障安全配置。

相关问题