プラグインへの入力としてMavenアセンブラプラグインの出力を使用する
-
22-07-2019 - |
質問
サードパーティアプリケーション用のプラグインフレームワークのさまざまなコンポーネントを構築するmavenプロジェクトがいくつかあります。集約(<!> lt; modules <!> gt;要素)を使用して、すべてのサブプロジェクトを含むマスタープロジェクトがあります。このマスタープロジェクトは、mavenアセンブラプラグインも呼び出します。これで、すべてのサブプロジェクトをビルドし、アセンブラにそれらのoutputs / files / sources / resourcesなどをマスタービルドディレクトリにコピーしてから、これらすべてのファイルを単一の配布zipに圧縮できます。コマンドでこれを行います:
mvn package assembly:assembly
これはすべてうまくいきます。このzipファイルを別のMavenプラグインに渡し、それを開いて、zipコンテンツをリストするカスタムマニフェストファイルを作成し、このマニフェストファイルをzipファイルに挿入し直します。これを行うためのプラグインを作成しましたが、正常に動作します。
私の問題は、このプラグインをビルドプロセスの一部としてmavenで実行することです。
プラグインにはアセンブラーからの出力が必要ですが、アセンブラーの後にプラグインを実行する方法はないと思われます。
誰でも助けてもらえますか?
解決
ターゲット/アセンブリでアセンブリを作成するためにアセンブリが既に定義されていると仮定すると、プラグインの実行を標準のライフサイクルなので、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
(またはインストール、検証、デプロイなどの後のフェーズ)を実行すると、関連するフェーズ(パッケージ)で実行されます。
プラグインは、アセンブリプラグインの後で 定義する必要があることに注意してください、後で実行されるようにします(異なるフェーズにある場合、順序は関係ありませんが、同じフェーズにある場合のみ)。