像这样的问题一直被问到,但不知何故,他们只关注依赖性。因此,根据maven documentation,构建顺序确定如下。
- 项目依赖于构建中的另一个模块
- 插件声明,其中插件是构建
中的另一个模块- 构建
中另一个模块的插件依赖项- 构建
中另一个模块的构建扩展声明<modules>
元素中声明的顺序(如果没有其他规则适用)
第一条规则是退出,例如如果模块A依赖于模块B,则后者首先构建。
第五条规则(最后一条)也很清楚。如果前三条规则不适用,我们会查看模块部分中的顺序。
另外两条规则对我来说并不清楚。英语不是我的母语,但我想知道规则二是否包含某种拼写错误。
我正在寻找一个简单的例子来详细解释这两个规则。
答案 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.