Maven如何在反应堆中订购模块

时间:2016-10-07 07:15:53

标签: maven maven-module maven-reactor

像这样的问题一直被问到,但不知何故,他们只关注依赖性。因此,根据maven documentation,构建顺序确定如下。

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

第一条规则是退出,例如如果模块A依赖于模块B,则后者首先构建。

第五条规则(最后一条)也很清楚。如果前三条规则不适用,我们会查看模块部分中的顺序。

另外两条规则对我来说并不清楚。英语不是我的母语,但我想知道规则二是否包含某种拼写错误。

我正在寻找一个简单的例子来详细解释这两个规则。

1 个答案:

答案 0 :(得分:6)

Let's go through them一个接一个。

  
      
  • 项目依赖于构建中的另一个模块
  •   

这意味着如果模块A依赖于模块B,那么必须在A之前构建B.这样可以处理A的POM中的情况:

git bundle
  
      
  • 插件声明,其中插件是构建
  • 中的另一个模块   

这意味着如果模块A使用a Maven plugin这是一个模块B,那么B必须在A之前构建。这样可以处理A的POM中你有以下情况: / p>

<dependencies>
  <dependency>
    <groupId>${project.groupId}<groupId>
    <artifactId>B<artifactId>
    <version>${project.version}</version>
  </dependency>
</dependencies>
  
      
  • 构建
  • 中另一个模块的插件依赖项   

这意味着如果模块A在模块B上使用Maven插件that has a dependency,那么必须在A之前构建B.这样可以处理A的POM中你有的情况:

<build>
  <plugins>
    <plugin>
      <groupId>${project.groupId}<groupId>
      <artifactId>B<artifactId>
      <version>${project.version}</version>
    </plugin>
  </plugins>
</build>

请注意,此规则在最后一个之后应用,因此即使插件本身也是构建的模块,它也将在之前构建,确保解决依赖项是安全的。

  
      
  • 构建
  • 中另一个模块的构建扩展声明   

这意味着如果模块A声明使用as extention模块B,则必须在A之前构建B。这将处理A的POM中您具有的情况:< / p>

<build>
  <plugins>
    <plugin>
      <groupId>some.plugin.groupId<groupId>
      <artifactId>some.plugin.artifactId<artifactId>
      <version>some.version</version>
      <dependencies>
        <dependency>
          <groupId>${project.groupId}<groupId>
          <artifactId>B<artifactId>
          <version>${project.version}</version>
        </dependency>
      </dependencies>
    </plugin>
  </plugins>
</build>
  
      
  • <build> <extensions> <extension> <groupId>${project.groupId}</groupId> <artifactId>B</artifactId> <version>${project.version}</version> </extension> </extensions> </build> 元素中声明的顺序(如果没有其他规则适用)
  •   

如果以前的规则都没有应用,那么顺序就是<modules>的顺序,它在聚合器项目的POM中看起来像:

<modules>

如果之前的规则均未应用,则将在B之前构建A.