原谅我。我是Maven的小伙子。
这是我的maven项目目录:
project/
pom.xml
moduleA/
moduleB/
sub-moduleA/
sub-moduleB/
sub-moduleC/
moduleC/
当然,在每个模块和子模块中,它们都有自己的pom.xml
。此外,在此示例中,moduleB
取决于moduleA
,而moduleA
取决于moduleC
。我知道在maven中它经历了多个阶段,但是它每次只需要一个阶段,或者每个阶段一个。目前,我唯一关注的三个阶段是compile
,package
和install
。
例如:
是否在订单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。谢谢!
答案 0 :(得分:6)
订单2:reactor检测所有项目,构建排序列表以按正确顺序构建项目(尊重依赖项),然后按照此顺序构建项目。
如果A取决于B,如果B未完全处理,则无法开始构建A.
答案 1 :(得分:2)
我并不是说要狡猾,但你应该熟悉自己的maven输出。它确实告诉你它正在做什么。它将准确地告诉您构建模块的顺序,然后它将准确地告诉您构建模块时正在进行的阶段/执行。
例如,这是一个简化的构建报告。首先,它告诉你它的建设项目。然后,对于每个阶段,都会有一个关于执行mojo执行的报告。请注意,执行行以三个开始和结束---(这是maven 3;它在maven 2中不同)。请注意它告诉你:
maven-clean-plugin
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 ---
答案 2 :(得分:0)
首先,我建议使用Maven 3而不是2,从后者迁移到前者非常简单(有时候你可以不改变任何东西),你会发现性能有很大提高。
此外,关于构建顺序,您应该阅读一些关于负责处理多模块项目的Maven Reactor,系统。