在 Maven 3.0.3 及更高版本中,有两条规则
- 插件执行按其阶段排序。看
https://maven.apache.org/ref/current/maven-core/lifecycles.html 为
阶段顺序。
例如这里mavin-plugin-1在maven-plugin-2之前执行
因为流程资源阶段被定义为发生在之前
编译阶段。
<plugin>
<artifactId>maven-plugin-2</artifactId>
<version>1.0</version>
<executions>
<execution>
<phase>compile</phase>
...
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-plugin-1</artifactId>
<version>1.0</version>
<executions>
<execution>
<phase>process-resources</phase>
...
</execution>
</executions>
</plugin>
- 如果多个执行具有相同的阶段,则第一个是
执行的将是内置的(例如 maven-compiler-plugin),其 id
是 default-something,那么其他执行将在
按顺序显示在您的 pom 文件中。
例如,如果你的 pom 中有这个
<plugin>
<artifactId>maven-plugin-1</artifactId>
<version>1.2.3</version>
<executions>
<execution>
<id>my-compile</id>
<phase>compile</phase>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-plugin-2</artifactId>
<version>4.5.6</version>
<executions>
<execution>
<id>my-compile-2</id>
<phase>compile</phase>
</execution>
</executions>
</plugin>
这在你有效的 pom 中的任何地方
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<executions>
<execution>
<id>**default-compile**</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
...
</executions>
</plugin>
然后 maven-compiler-plugin 将执行 maven-compiler-plugin 后跟 maven-plugin-1 和 maven-plugin-2。
如果你想让 maven-compiler-plugin:compile 目标在 maven-plugin-1 之后执行,那么你可以这样做
<plugin>
<artifactId>maven-plugin-1</artifactId>
<version>1.2.3</version>
<executions>
<execution>
<id>my-compile</id>
<phase>compile</phase>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<executions>
<execution>
<id>something-other-than-**default-compile**</id>
<phase>compile</phase>
</execution>
<execution>
<id>**default-compile**</id>
<phase>none</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>