Mavenプラグインの違い(Assembly-plugins、jar-plugins、影付きプラグイン)
私はMavenの初心者であり、これらのMavenプラグインの違いに混乱しています。これらはすべてjarファイルを作成しますか?今私の質問は
各プラグインで作成されたjarの違いは何ですか(アセンブリプラグイン、jarプラグイン、シェーディングプラグイン)
各プラグインの目的。 (アセンブリ、jarプラグイン、シェーディングプラグイン)
Mvnパッケージを入力すると、これらのプラグインを指定しなくても、jar出力が表示されます。これらのプラグインのない出力jarとこれらのプラグインのある出力jarの違いは何ですか? TIA
maven-jar-plugin
:このプラグインは、JARを構築および署名する機能を提供します。ただし、Javaファイルをsrc/main/Java
およびsrc/main/resources/
の下にコンパイルするだけです。依存関係JARファイルは含まれません。maven-Assembly-plugin
:このプラグインは、すべての依存関係JARを生のクラスに抽出し、それらをグループ化します。また、メインクラスを指定して実行可能JARを構築するために使用することもできます。依存関係の少ないプロジェクトでのみ機能します。多くの依存関係を持つ大規模なプロジェクトの場合、Javaクラス名が競合します。maven-shade-plugin
:すべての依存関係を1つのuber-JARにパッケージ化します。また、メインクラスを指定して実行可能JARを構築するために使用することもできます。このプラグインは、特定のファイルの内容を クラスの再配置 で上書きする代わりにマージするため、特に便利です。これは、JAR全体で同じ名前のリソースファイルがあり、プラグインがすべてのリソースファイルを一緒にパッケージ化しようとする場合に必要です。
次のコマンドで何がわかるか見てみましょう。
mvn help:describe -Dplugin=org.Apache.maven.plugins:maven-jar-plugin
help
、jar
、test-jar
。私はあなたがjar
ゴールにほとんど興味があると信じています。それは説明によれば以下を行います:
現在のプロジェクトからJARをビルドします。
サイドノートとして、mvn help:effective-pom
パッケージングがjar
に設定されているプロジェクトでは、このプラグインがpackage
フェーズ中に自動的に構成され実行されることを示しています。
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>default-jar</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
これは別の目的を果たします。 8つの目標がありますが、そのうち6つは非推奨です。 help
ゴールとは別に、これによりsingle
ゴールが残ります。
mvn help:describe -Dplugin=org.Apache.maven.plugins:maven-Assembly-plugin
アセンブリ記述子からアプリケーションバンドルまたは配布をアセンブルします。この目標は、ライフサイクルにバインドするか、コマンドラインから直接呼び出すのに適しています(ビルドが開始される前にすべての必要なファイルが利用可能であるか、コマンドラインでこのファイルの前に指定された別の目標によって生成される場合)。
プロジェクトのアーティファクト(JAR、WARなど)よりも多くを配信する場合は、アセンブリプラグインを使用できますが、構成は別のファイルに保存されます。
主な目標の説明は少し残念です。
mvn help:describe -Dplugin=org.Apache.maven.plugins:maven-shade-plugin
Shaderコンポーネントにシェーディングを委任するMojo。
Uber-jarを生成する場合は、主にこのプラグインを使用します。これは、すべての推移的な依存関係を持つJARのアーティファクトです。
基本的に、ライブラリを構築する場合は、デフォルトのJARプラグインを使用します。アプリケーションを構築している場合は、shadeプラグインの使用を検討できますが、私にとっては、それは一種の迅速で汚いものです。 uber-jarが好みではない場合、またはディストリビューションが単一のJAR(外部構成、ネイティブ依存関係など)に収まらない場合は、Assemblyプラグインを使用する必要があります。
Maven jarプラグインは、すべてのSOURCEファイル[.Javaファイルからコンパイルされた.classファイル]がパックされたjarファイルを作成しますが、サードパーティのjarファイルまたは他のライブラリjarファイルのような多くの依存関係があるため、jar自体はデプロイできませんSOURCE jarファイルを実行する必要がありました。 Maven Assemblyプラグインが登場するこの場所では、.Zip、.tar、.gzなどの選択した拡張子のパッケージが作成されます。これは、すべての依存関係がパックされた完全にデプロイ可能なパッケージです。パッケージをサーバーにデプロイするときに作成する必要があるアセンブリプラグインのディレクトリ構造を指定することもできます。