Порядок целей Maven 3

Есть две цели, связанные с этапом тестирования жизненного цикла 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 FIFO на той же фазе. Я проверил, что цели имеют один и тот же порядок в эффективном pom. Возможно ли, что один из плагинов переопределяет порядок по умолчанию? Почему плагин surefire выполняется раньше, чем плагин liquibase?


person Community    schedule 02.11.2015    source источник


Ответы (1)


Вы правы в том, что Maven выполняет цели в том порядке, в котором они определены в POM, но в этом особом случае вы использовали идентификатор default-test для второго выполнения, который имеет специальное значение.

Я не могу найти никаких упоминаний об этом поведении прямо сейчас, но изменение вашего <id> на что-то другое восстановит поведение, которое вы ожидаете.

Однако в этом особом случае снова изменение идентификатора приведет к тому, что maven-surefire-plugin будет выполнено дважды: оно уже выполняется по умолчанию, а добавление выполнения (с идентификатором, отличным от default-test) добавит другое вместо переопределения значения по умолчанию.

person Tunaki    schedule 02.11.2015
comment
Кроме того, я думаю, что выполнение surefire по умолчанию происходит до всех явно определенных исполнений в POM. - person ; 02.11.2015