Maven Assembly Plugin で外部依存 jar をまとめる


Maven Assembly Plugin をマルチモジュールプロジェクトで使う - A Memorandumと関連して

maven-assembly-pluginの利用

Maven Assembly Plugin を使うと、外部の依存jarファイルを解凍して、プロジェクトの成果物と合わせて1つの jar ファイルを作成できます。FatJar なんて言われています。

<?xml version="1.0"?>
<project ・・
 ・・
  <build>
    <plugins>
    ・・
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
          <archive>
            <manifest>
              <mainClass>etc9.app.App</mainClass>
            </manifest>
          </archive>
        </configuration>
      </plugin>
    ・・
    </plugins>
  </build>
 ・・
</project>

descriptorRef 要素に jar-with-dependencies を指定します。以下の定義が事前定義されています。

  • bin:依存ライブラリ以外
  • jar-with-dependencies:プロジェクトと外部依存ライブラリを 1 つの jar ファイルにまとめる
  • src:ソース配布用でpom.xmlなども含まれる
  • project:プロジェクト全体をまとめる

上記の内容の詳細は assembly Descriptor として以下で参照できます。
http://maven.apache.org/plugins/maven-assembly-plugin/descriptor-refs.html

packageフェーズで動作させる

通常は以下のように execution を指定してpackageフェーズで動くようにするでしょう。

<project ・・
 ・・
  <build>
    ・・
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.2</version>
        <executions>
          <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
          <archive>
            <manifest>
              <mainClass>etc9.app.App</mainClass>
            </manifest>
          </archive>
        </configuration>
      </plugin>
    ・・
    </plugins>
  ・・ 
  </build>
</project>

maven-shade-pluginでもできる

maven-shade-plugin でも同様のことが行えます。以下のとおり。

<project ・・
 ・・
  <build>
    ・・
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <finalName>sample-${project.version}</finalName>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>etc9.app.App</mainClass>
                </transformer>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>
    ・・
    </plugins>
  ・・ 
  </build>
</project>




Apache Maven 3クックブック Javaソフトウェア開発のための特選レシピ集

Apache Maven 3クックブック Javaソフトウェア開発のための特選レシピ集

Maven: The Definitive Guide: The Definitive Guide

Maven: The Definitive Guide: The Definitive Guide