Использование вывода плагина ассемблера maven в качестве входных данных для плагина - PullRequest
2 голосов
/ 18 сентября 2009

У меня есть несколько проектов maven, которые создают различные компоненты инфраструктуры плагинов для сторонних приложений. У меня есть мастер-проект, который, используя агрегацию ( элемент), включает в себя все подпроекты. Этот мастер-проект также вызывает плагин для ассемблера maven. Теперь я могу собрать все подпроекты и сделать так, чтобы ассемблер скопировал их выходные данные / файлы / источники / ресурсы и т. Д. В основной каталог сборки, а затем сжал все эти файлы в один дистрибутивный zip-архив. Я делаю это с помощью команды:

mvn упаковка в сборе: сборка

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

Моя проблема заключается в запуске этого плагина maven в процессе сборки.

Плагину нужен вывод от ассемблера, но, похоже, в любом случае запускать плагин после ассемблера не нужно.

Может кто-нибудь помочь?

1 Ответ

1 голос
/ 18 сентября 2009

Предполагая, что сборка уже была определена для создания сборки в целевом объекте / сборках, вам просто нужно связать выполнение плагинов с фазами стандартного жизненного цикла , чтобы вы могли запустить mvn install ( например) и запускать плагины в течение этого жизненного цикла.

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <executions>
      <execution>
        <id>generate-assembly</id>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
        <configuration>
          <!--your configuration here -->
          ...
        </configuration>
      </execution>
    </executions>
  </plugin>

Затем вы связываете выполнение вашего плагина с более поздним этапом (скажем, интеграционным тестом), чтобы он мог получить доступ к файлам сборки:

  <plugin>
    <groupId>your.plugin.groupId</groupId>
    <artifactId>your-artifactId</artifactId>
    <executions>
      <execution>
        <id>mung-manifests</id>
        <phase>package</phase>
        <goals>
          <goal>your-goal-name</goal>
        </goals>
        <configuration>
          <assemblyDirectory>${project.build.directory}/assemblies</assemblyDirectory>
        </configuration>
      </execution>
    </executions>
  </plugin>

Используя этот подход, каждый плагин будет запускаться в соответствующей фазе (пакете) при запуске mvn package (или более поздней фазе, такой как установка, проверка, развертывание ...).

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

...