Maven -T覆盖以强制某些项目是单线程的?

时间:2013-07-20 09:12:20

标签: maven maven-3

我有一个像这样的项目结构:

Parent Project
 - A
 - B
 - C
 - D (Parent to D.1-3)
   - D.1
   - D.2 
   - D.3
 -E

ABCE是代码项目(OSGi包),它们也包含单元测试,D.1,D.2,D.3是使用pax-exam开始使用jUnit运行器的集成测试。

ABCE单元测试可以并行运行。 D.1-3不能并行运行。这很简单,我只是告诉我在父母pom中的确定并行运行所有内容,并且在D's pom中我告诉我们确保一次运行一切。 D.1-3将D作为父pom。

好的,现在我有并行测试执行。我也真的想要并行构建。

如果我在maven中使用-T 5标志,则意味着并行运行多个模块。当涉及到surefire时,这意味着我将有5个surefire实例,每个实例并行运行自己的测试。这也很好。

问题在于maven可能会决定并行运行D.1,D.2,D.3,然后这些测试用例将并行运行,无论我说什么都是肯定的。

有没有办法在D.pom中覆盖maven的-T标志?

或强制部分构建的任何其他方式进行序列化?除了将D.1-3移出该项目并进入另一个始终使用-T 1运行的项目。

2 个答案:

答案 0 :(得分:0)

看看: maven invoker plugin

它允许通过.properties文件中的配置在其自身内启动maven。 因此,可以使用期望的-T设置单独构建项目D.x.

答案 1 :(得分:0)

一种可能更简单的方法是覆盖模块pom中的surefire.forkCount。这样,您就可以获得并行构建和并行测试执行,只有特别有问题的模块可以串行运行。