Maven 3 目标排序
Maven 3 goal ordering
有两个目标绑定到默认 Maven 生命周期的测试阶段。第一个目标(在pom.xml中出现的顺序)是:
<artifactId>liquibase-maven-plugin</artifactId>
<version>3.4.1</version>
<executions>
<execution>
<id>update</id>
<phase>test</phase>
<goals>
<goal>update</goal>
</goals>
</execution>
</executions>
第二个是:
<artifactId>maven-surefire-plugin</artifactId>
<version>2.7.1</version>
<executions>
<execution>
<id>default-test</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
测试阶段先执行surefire插件,这与Maven 3同阶段目标先进先出顺序矛盾。我验证了目标在有效 pom 中具有相同的顺序。是否有可能其中一个插件覆盖了默认顺序?为什么surefire插件先于liquibase插件执行?
你说得对,Maven 按照 POM 中定义的顺序执行目标,但在这种特殊情况下,你对第二次执行使用了 default-test
标识符,它有一个 special meaning.
我现在找不到关于此行为的任何参考,但将您的 <id>
更改为其他内容将恢复您期望的行为。
然而,再次针对这种特殊情况,更改 id 将使 maven-surefire-plugin
执行两次:默认情况下它已经执行并添加一个执行(具有不同于 default-test
的 id)将添加另一个而不是覆盖默认的。
有两个目标绑定到默认 Maven 生命周期的测试阶段。第一个目标(在pom.xml中出现的顺序)是:
<artifactId>liquibase-maven-plugin</artifactId>
<version>3.4.1</version>
<executions>
<execution>
<id>update</id>
<phase>test</phase>
<goals>
<goal>update</goal>
</goals>
</execution>
</executions>
第二个是:
<artifactId>maven-surefire-plugin</artifactId>
<version>2.7.1</version>
<executions>
<execution>
<id>default-test</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
测试阶段先执行surefire插件,这与Maven 3同阶段目标先进先出顺序矛盾。我验证了目标在有效 pom 中具有相同的顺序。是否有可能其中一个插件覆盖了默认顺序?为什么surefire插件先于liquibase插件执行?
你说得对,Maven 按照 POM 中定义的顺序执行目标,但在这种特殊情况下,你对第二次执行使用了 default-test
标识符,它有一个 special meaning.
我现在找不到关于此行为的任何参考,但将您的 <id>
更改为其他内容将恢复您期望的行为。
然而,再次针对这种特殊情况,更改 id 将使 maven-surefire-plugin
执行两次:默认情况下它已经执行并添加一个执行(具有不同于 default-test
的 id)将添加另一个而不是覆盖默认的。