如何根据依赖关系列出Maven构建/编译序列?

时间:2014-01-16 18:56:30

标签: maven pom.xml

如果我有pom层次结构,其中superpom调用多个彼此依赖的子模块,我如何根据依赖关系列出构建/编译序列? IOW,如果superpom有模块mod1,mod2,mod3和mod2取决于mod3而mod3取决于mod1,那么序列是mod1,mod3,然后是mod2。如何在没有复杂的XML解析pom数据层次结构的情况下列出该订单?

3 个答案:

答案 0 :(得分:37)

您想知道的是所谓的反应堆构建订单

  

反应器根据每个项目在各自项目描述符中声明的依赖关系确定正确的构建顺序,然后执行一组规定的目标。它可以用于构建项目和其他目标,例如站点生成。 (来源:old multi-module documentation

它收集要构建的所有模块,对项目进行排序并按顺序构建它们。它保证在其他模块需要之前构建任何模块。

据我所知,没有直接的方法只创建这些项目的列表,但最接近获取信息的是:

mvn validate

它将在顶部显示 reactor构建顺序

~/parent$ mvn validate
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] simple.parent
[INFO] simple.child
[INFO] simple.anotherchild
[...]                                                                        

除了验证项目的正确性以及所有必要的信息是否可用之外,不会执行任何额外的工作。

有关详情,请参阅guide to working with multiple modulesthis answer about what the maven reactor is

答案 1 :(得分:7)

也许您正在寻找Maven依赖:树选项?您可能需要调整includes以仅包含您的模块。 http://maven.apache.org/plugins/maven-dependency-plugin/tree-mojo.html

mvn dependency:tree -Dverbose -DoutputFile=tree.txt -DoutputType=text -Dincludes=com.mycompany.*

答案 2 :(得分:0)

mvn validate >validate.log

project_name=$(mvn org.apache.maven.plugins:maven-help-plugin:3.1.0:evaluate -Dexpression=project.name -q -DforceStdout)

sed '1,/^\[INFO\] Reactor Build Order:/ d' validate.log  |sed "/\[INFO\] ${project_name}/,$ d" |sed 's/\[INFO\] //'