2009-12-13 6 views
15

いくつかのjarモジュールを持つmaven2プロジェクトがあります。プロジェクトは、ディレクトリモジュール/ XYZ/target/XYZ-xxxjarの各モジュールの.jarアーカイブを取得します。Maven2のモジュールjarを単一のjarにマージするには?

プロジェクトPのバージョンがPp .qr、私はすべてのサブモジュールが含まれている単一のjar Pp.qr-all.jarを生成したい、どうすればよいですか?

答えて

18

あなたがしたいものはuber jarと呼ばれます。このモジュールは、あなたが一つのjarにパッケージ化したい他のすべてのサブモジュールと依存関係を持たなければなりません。必要な成果物を生成する別のサブモジュールを作成した場合、それはすべての依存関係を持つ原子炉で構築できますが、それは別のプロジェクトであればすべてのuber jar依存関係をインストールする必要があります。

| parent 
| -- submodule1 
... 
| -- submoduleN 
| -- uberjarSubmodule 

ユーバージャーを使用して行うことができます。

  1. maven-shade-plugin - あなたのケースでは、あなたのモジュールから

    <project> 
    ... 
    <build> 
    <plugins> 
        <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-shade-plugin</artifactId> 
        <version>1.2.2</version> 
        <executions> 
         <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
         <configuration> 
          <artifactSet> 
          <excludes> 
           <exclude>classworlds:classworlds</exclude> 
           <exclude>junit:junit</exclude> 
           <exclude>jmock:jmock</exclude> 
           <exclude>xml-apis:xml-apis</exclude> 
          </excludes> 
          </artifactSet> 
         </configuration> 
         </execution> 
        </executions> 
        </plugin> 
    </plugins> 
    </build> 
    ... 
    </project> 
    
  2. maven-assembly-pluginを推移の依存性を排除するために覚えている - thisにあなたは詳細な回答を見つけるでしょう

+0

クールなプラグインのようです。 – Clinton

1

これをどのように出荷するかによって、あなたのjarが他の開発者にmaven経由でダウンロードして使用させたいライブラリである場合には、プロジェクトpomにはdependenciesと指定する必要があります。

バイナリを取得してプロジェクトを使用したいエンドユーザーに何かを発送する場合は、assemblyプラグインを使用してプロジェクトをパッケージ化してみてください。このプラグインを使用すると、依存関係の横にjarファイルをパッケージ化できます。これをすべて単一のjarファイルに入れるわけではありませんが、ユーザーのクラスパスを正しく設定していると仮定しても問題はありません。

関連する問題