8

对不起。我是Maven的菜鸟。

这是我的maven项目目录:

project/
    pom.xml
    moduleA/
    moduleB/
        sub-moduleA/
        sub-moduleB/
        sub-moduleC/
    moduleC/

当然,在每个模块和子模块中,它们都有自己的pom.xml. 此外,在此示例中,moduleB取决于moduleAmoduleA取决于moduleC. 我知道在 Maven 中它经历了多个阶段,但是它是一次一个阶段进行,还是一次一个模块进行一个。现在,我关心的唯一三个阶段是compilepackageinstall

例如:

它是否按顺序 1执行:

compile moduleC
compile moduleA
compile moduleB
package moduleC
package moduleA
package moduleB
install moduleC
install moduleA
install moduleB

还是按订单 2执行此操作:

compile moduleC
package moduleC
install moduleC
compile moduleA
package moduleA
install moduleA
compile moduleB
package moduleB
install moduleB

还是它以完全不同的顺序执行,还是我完全不了解 maven?

我正在运行 Maven 2.2.1。谢谢!

4

3 回答 3

9

顺序 2:reactor 检测所有项目,构建排序列表以正确顺序(尊重依赖关系)构建项目,然后按照此顺序构建项目。

如果 A 依赖于 B,如果 B 未完全处理,则无法开始构建 A。

于 2013-01-24T15:57:19.880 回答
1

我并不是要刻薄,但您应该让自己熟悉 maven 输出。它确实可以准确地告诉您它在做什么。它会准确地告诉您构建模块的顺序,然后它会准确地告诉您构建每个模块时正在进行的阶段/执行。

例如,这是一个简化的构建报告。首先,它告诉你它的建筑是什么项目。然后,对于每个阶段,都有一个关于正在执行哪个 mojo 的报告。请注意,执行行以三个 --- 开头和结尾(这是 maven 3;在 maven 2 中有所不同)。请注意,它告诉您:

  1. 插件的名称,例如maven-clean-plugin
  2. 插件的版本
  3. 正在执行的插件上的目标名称
  4. 执行的名称,例如default-clean

请注意,作为生命周期阶段的默认绑定的所有执行,即内置执行,都有一个default-clean与阶段标识位置类似的名称,以及它是默认值的事实。

[INFO] ------------------------------------------------------------------------
[INFO] Building common-utilities 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.3:clean (default-clean) @ common ---

   SNIP

[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ common ---

   SNIP

[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ common ---

   SNIP

[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ common ---
于 2013-01-24T18:12:09.543 回答
0

First, I'd suggest to work with Maven 3 rather than 2, migration from the latter to the former is really simple (sometimes you can do it without changing anything) and you will notice a high improvement in performance.

Besides, regarding the build order, you should read a bit about the Maven Reactor, the system in charge of processing multi-module projects.

于 2013-01-24T14:42:57.657 回答