web-dev-qa-db-ja.com

Mavenプラグインの違い(Assembly-plugins、jar-plugins、影付きプラグイン)

私はMavenの初心者であり、これらのMavenプラグインの違いに混乱しています。これらはすべてjarファイルを作成しますか?今私の質問は

  1. 各プラグインで作成されたjarの違いは何ですか(アセンブリプラグイン、jarプラグイン、シェーディングプラグイン)

  2. 各プラグインの目的。 (アセンブリ、jarプラグイン、シェーディングプラグイン)

  3. Mvnパッケージを入力すると、これらのプラグインを指定しなくても、jar出力が表示されます。これらのプラグインのない出力jarとこれらのプラグインのある出力jarの違いは何ですか? TIA

41
ilovejavaAJ
  1. maven-jar-plugin:このプラグインは、JARを構築および署名する機能を提供します。ただし、Javaファイルをsrc/main/Javaおよびsrc/main/resources/の下にコンパイルするだけです。依存関係JARファイルは含まれません。
  2. maven-Assembly-plugin:このプラグインは、すべての依存関係JARを生のクラスに抽出し、それらをグループ化します。また、メインクラスを指定して実行可能JARを構築するために使用することもできます。依存関係の少ないプロジェクトでのみ機能します。多くの依存関係を持つ大規模なプロジェクトの場合、Javaクラス名が競合します。
  3. maven-shade-plugin:すべての依存関係を1つのuber-JARにパッケージ化します。また、メインクラスを指定して実行可能JARを構築するために使用することもできます。このプラグインは、特定のファイルの内容を クラスの再配置 で上書きする代わりにマージするため、特に便利です。これは、JAR全体で同じ名前のリソースファイルがあり、プラグインがすべてのリソースファイルを一緒にパッケージ化しようとする場合に必要です。

参照: comparison:maven plugin jar、Assembly、shade

70
secfree

Jarプラグイン

次のコマンドで何がわかるか見てみましょう。

mvn help:describe -Dplugin=org.Apache.maven.plugins:maven-jar-plugin

helpjartest-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プラグインを使用する必要があります。

19
Arthur Noseda

Maven jarプラグインは、すべてのSOURCEファイル[.Javaファイルからコンパイルされた.classファイル]がパックされたjarファイルを作成しますが、サードパーティのjarファイルまたは他のライブラリjarファイルのような多くの依存関係があるため、jar自体はデプロイできませんSOURCE jarファイルを実行する必要がありました。 Maven Assemblyプラグインが登場するこの場所では、.Zip、.tar、.gzなどの選択した拡張子のパッケージが作成されます。これは、すべての依存関係がパックされた完全にデプロイ可能なパッケージです。パッケージをサーバーにデプロイするときに作成する必要があるアセンブリプラグインのディレクトリ構造を指定することもできます。

0
Shailesh