【问题标题】:Maven build order (Multiple modules) [duplicate]Maven构建顺序(多个模块)[重复]
【发布时间】:2013-09-08 21:48:03
【问题描述】:

我有一个 Maven 父项目,它有多个子/模块...我有以下 pom.xml 作为主/父项目;

<modules>
        <module>Main-Ear</module>
        <module>Sub-Web</module>
        <module>Sub-Ui</module>
        <module>Sub-Services</module>
        <module>Sub-SSO-Login</module>
  </modules>

但是,我发现实际的构建顺序有所不同... 构建后,实际顺序如下:

Main
Sub-Services
Sub-SSO-Login
Sub-UI
Sub-Web
Main-Ear

在这种情况下,Maven 究竟从哪里获取构建顺序?

【问题讨论】:

    标签: java maven build


    【解决方案1】:

    您无法手动控制构建顺序:

    来自 Maven 项目文档 (Guide to Working with Multiple Modules):

    反应堆排序

    因为多模块构建中的模块可以相互依赖, 重要的是,反应堆以一种方式对所有项目进行排序 保证在需要之前构建任何项目。

    在对项目进行排序时遵循以下关系:

    • 项目依赖于构建中的另一个模块
    • 插件声明,其中插件是构建中的另一个模块
    • 插件依赖于构建中的另一个模块
    • 构建中另一个模块的构建扩展声明,按照元素中声明的顺序(如果没有其他规则适用)

    请注意,仅使用“实例化”引用 - dependencyManagement 和 pluginManagement 元素不会导致 更改反应堆排序顺序

    【讨论】:

      【解决方案2】:

      Maven 没有采用我们在主pom.xml 中定义的模块构建顺序。 Maven 通过考虑模块与其他模块的依赖关系来决定顺序。

      在您的情况下,Main-Ear 肯定应该最后构建。

      让我们考虑下面的例子。

      我有模块ABC。模块A 依赖于模块CB,而模块C 依赖于模块B。那么maven的建设顺序会是

      B
      C
      A  
      

      【讨论】:

      • 所以,你是说在 pom.xml 中的任何地方都没有明确的声明......但是 Maven 自己做出决定......基于依赖关系......
      • @testndtv 是的。我认为(但我不确定)它可能仍然取决于您声明的顺序,如果两个子模块之间没有依赖关系。例如A -> C 和 B -> C,那么 Maven 可以使用声明的顺序来确定 A 或 B 中的哪个先构建
      • @AdrianShum 如果彼此之间没有依赖关系,那么 maven 将使用我们定义的任何顺序
      猜你喜欢
      • 2012-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-07
      • 1970-01-01
      • 1970-01-01
      • 2017-07-08
      • 2012-10-09
      相关资源
      最近更新 更多