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)将添加另一个而不是覆盖默认的。