Maven多线程构建是如何工作的?

4
我一直在寻找关于maven使用-T选项构建多模块项目的执行方式的澄清。在他们的confluence页面上,他们指出:

该构建模式分析您项目的依赖图,并根据您项目的依赖图安排可以并行构建的模块...

所以按照我的理解,如果我执行mvn clean install -T 4,其中我有A、B、C、D、E和F这些模块,如下:
  • A依赖于B
  • B依赖于C
  • D依赖于C
那么C、E和F将同时开始,只有当C完成后,D和B才会开始。这是正确的吗?
我的进一步问题是:依赖项(D和B)是否会在其父项(C)完成后立即启动?
  1. 编译/安装完成但不一定测试完成,还是
  2. 所有过程都完成,包括测试?
关于我的设置信息:这在Maven 3.3.3和Maven 3.1.1上都发生过。我目前正在使用Java 1.7.0_79。
1个回答

1
正如您在图形上看到的那样,它们的起点基于它们的级别。因此,我假设模块C、E和F将首先启动,一旦所有这些模块(级别1)完成,下一个级别的B和D模块将启动,最后是模块A。
模块内部的执行基于生命周期,这意味着模块将运行所有生命周期阶段,例如如果您运行mvn -T 4 package,所有模块都将运行包括打包阶段在内的所有周期。 如果您运行mvn -T 4 install,则所有模块都会运行所有生命周期步骤(其中包含测试阶段)... smart-builder可以使这个过程更快,特别是当你有大量的模块时。

我明白每个模块最终都将通过整个生命周期的所有阶段,但我的第二个问题实际上更多地涉及到它会在什么时候从一个模块移到下一个模块?例如,如果我有4个线程,并且A、B和C依赖于D,那么A、B和C是否必须等待D完全完成?还是说它们会在D构建完成后尽早启动(尽管未经测试)? - wilson
按照我所解释的级别。 - khmarbaise
我不是在问顺序,而是时间安排。他们什么时候可以继续并开始下一个步骤? - wilson
正如我之前所提到的,如果这个关卡已经完成,下一个关卡将会开始。也许我误解了你的意思? - khmarbaise
所以在继续之前,必须完全完成该级别的Maven目标?我只是三重检查哈哈。谢谢@khmarbaise - wilson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接