Maven阶段订单与多模块项目?

时间:2013-01-24 14:34:39

标签: maven maven-2 multi-module

原谅我。我是Maven的小伙子。

这是我的maven项目目录:

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

当然,在每个模块和子模块中,它们都有自己的pom.xml。此外,在此示例中,moduleB取决于moduleA,而moduleA取决于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。谢谢!

3 个答案:

答案 0 :(得分:6)

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

如果A取决于B,如果B未完全处理,则无法开始构建A.

答案 1 :(得分:2)

我并不是说要狡猾,但你应该熟悉自己的maven输出。它确实告诉你它正在做什么。它将准确地告诉您构建模块的顺序,然后它将准确地告诉您构建模块时正在进行的阶段/执行。

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

  1. 插件的名称,例如maven-clean-plugin
  2. 插件的版本
  3. 正在执行的插件上的目标名称
  4. 执行的名称,例如default-clean
  5. 注意,作为生命周期阶段的默认绑定的所有执行(即内置执行)都具有类似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 ---
    

答案 2 :(得分:0)

首先,我建议使用Maven 3而不是2,从后者迁移到前者非常简单(有时候你可以不改变任何东西),你会发现性能有很大提高。

此外,关于构建顺序,您应该阅读一些关于负责处理多模块项目的Maven Reactor系统