Как объявить до и после выполнения плагина maven вокруг другого выполнения плагина

Я хотел бы создать порядок выполнения в моем плагине, который окружает плагин maven с до и после выполнения другого плагина maven. Все 3 исполнения являются частью фазы развертывания.

Вот пример того, что я хочу сделать:

  • фаза: развернуть
  • url: get: execute-before
  • зависимость: распаковать
  • url: get: execute-after

Примечание: url: get - это мое собственное custo mojo и просто выполняет http-получение с помощью commons httpClient.

Обычно я добавляю выполнение после плагина на следующем этапе, но, к сожалению, развертывание является последней фазой жизненного цикла jar.

Заранее спасибо,

Костаса


Примечание. Следующий сегмент плагинов из моего файла pom создает следующий порядок выполнения, который не ожидается:

  • фаза: развернуть
  • url: get: execute-before
  • url: get: execute-after
  • зависимость: распаковать

Сегмент плагина:

        <plugin>
            <groupId>com.blabla.stpadmin</groupId>
            <artifactId>maven-url-plugin</artifactId>
            <version>1.0-SNAPSHOT</version>
            <executions>
                <execution>
                    <id>stop-stpadmin-service</id>
                    <phase>deploy</phase>
                    <goals>
                        <goal>get</goal>
                    </goals>
                    <configuration>
        ...
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>unpack</id>
                    <phase>deploy</phase>
                    <goals>
                        <goal>unpack</goal>
                    </goals>
                    <configuration>
        ...
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>com.blabla.stpadmin</groupId>
            <artifactId>maven-url-plugin</artifactId>
            <version>1.0-SNAPSHOT</version>
            <executions>
                <execution>
                    <id>start-stpadmin-service</id>
                    <phase>deploy</phase>
                    <goals>
                        <goal>get</goal>
                    </goals>
                    <configuration>
        ...
                    </configuration>
                </execution>
            </executions>
        </plugin>

Ответы

Ответ 1

Вы можете связать выполнение каждого плагина с одной и той же фазой, и они будут выполнены в указанном вами порядке. Обратите внимание, что они будут выполнены после запуска цели развертывания, поэтому вам может потребоваться привязать их к предыдущей фазе (установка)

Обновление: чтобы гарантировать выполнение перед и после выполнения целей вокруг выполнения плагина зависимостей, вам необходимо убедиться, что они определены в отдельных плагинах. В противном случае две конфигурации будут объединены и выполняться последовательно.

Если два исполнения необходимо определить в одном и том же плагине, вы можете сделать это, указав собственный жизненный цикл и вызывая этот жизненный цикл до того, как ваш Mojo будет выполнен с помощью аннотации выполнения. В этом ответе я описал, как создать пользовательский жизненный цикл и заставить его быть вызванным до запуска плагина. Если вы сконфигурируете цель выполнения для вызова плагина зависимостей, вы получите требуемый порядок выполнения (вы даже можете вызвать цель выполнения перед этим жизненным циклом).

В приведенном ниже примере будут выполняться три плагина на этапе развертывания:

  <plugin>
    <groupId>custom.url.plugin</groupId>
    <artifactId>maven-url-plugin</artifactId>
    <version>1.0</version>
    <executions>
      <execution>
        <phase>deploy</phase>
        <goals>
          <goal>execution-before</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.1</version>
    <executions>
      <execution>
        <phase>deploy</phase>
        <goals>
          <goal>unpack</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
  <plugin>
    <groupId>custom.url.plugin</groupId>
    <!--specify final execution in a different plugin to 
           avoid the configurations being merged-->
    <artifactId>maven-url-2-plugin</artifactId>
    <version>1.0</version>
    <executions>
      <execution>
        <phase>deploy</phase>
        <goals>
          <goal>execution-after</goal>
        </goals>
      </execution>
    </executions>
  </plugin>