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

StackOverflow https://stackoverflow.com/questions/1445235

  •  22-07-2019
  •  | 
  •  

Вопрос

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

сборка пакета mvn: сборка

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

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

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

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

Это было полезно?

Решение

Предполагая, что сборка уже была определена для создания сборки в target / сборки, вам просто нужно привязать выполнение плагинов к этапам стандартный жизненный цикл , поэтому вы можете запускать 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 (или более поздней стадии, такой как установка, проверка, развертывание ...).

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top