Использование вывода плагина ассемблера maven в качестве входных данных для плагина
-
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
(или более поздней стадии, такой как установка, проверка, развертывание ...). Р>
Обратите внимание, что ваш плагин должен быть определен после плагина сборки , чтобы обеспечить его последующее выполнение (не имеет значения порядок, если они находятся в разных фазах, только когда в одной фазе).