Maven Failsafe插件和多模块项目:如何使用反应堆中的其他模块?

时间:2012-06-14 16:08:27

标签: maven maven-2 maven-failsafe-plugin

我正在运行目标failsafe:对多模块项目进行集成测试,格式为:

父:
-------- Module_A
-------- Module_B

考虑通过Test_B1_IT(在模块B中)测试Class_A1中的内容(在模块A中)。

您现在更改了Class_A1,现在测试失败了。但是,如果你运行目标

mvn failsafe:integration-test

测试仍将通过 - 在您运行部署目标之前,不会反映更改。我相信目标是使用存储库中的jar,而不是当前reactor的最新版本。
如果你运行集成测试它可以工作......但它似乎也运行所有单元测试(似乎没有办法跳过单元测试并运行_IT集成测试)。

我也看到它适用于目标集成测试,或者如果我在故障保护目标之前添加“编译”。但是,第一个选项运行所有测试(单位+积分)

这是故障安全插件的问题还是maven处理多模块项目中的依赖关系的方式?最好的方法是添加编译选项吗?

1 个答案:

答案 0 :(得分:1)

首先,您可以在命令行上通过given skip跳过单元测试,如:

mvn -Dmaven.test.skip=true lifecycle

如果您想运行集成测试,则不应调用failsafe:integration-test目标,因为您缺少预集成测试阶段和集成后测试生命周期阶段。

更好的方法是通过调用

来使用Maven的反应器
mvn -D... -am -pl Module_A  lifecylcephase

-am开关将确保编译所有相关模块。

此外,我建议将集成测试放入一个单独的模块中,使生活更轻松:

 +-- root 
      +--- pom.xml
      +--- mod1 (pom.xml)
      +--- mod2 (pom.xml)
      +--- mod-it (pom.xml)

可以使用如下配置文件激活mod-it:

mvn -Prun-its ...

您撰写的关于使用该模块的内容是真实的。如果您只是调用一个目标,依赖关系将针对本地存储库解决,当然不是通过反应堆,因为在这种情况下没有reactor运行。

尽管如此,集成测试阶段假定所有单元测试都已经运行,因此像Maven在其生命周期中那样首先运行单元测试是有意义的。但是你可以通过使用一些属性来详细控制它来影响它。但通常运行单元测试应该不是问题,因为单元测试必须快速运行。