カテゴリ: Jakarta EE 更新日: 2026/02/15

Maven Shade PluginでUber-JARを作成!Jakarta EE初心者向け完全ガイド

Maven Shade Pluginを使ったUber-JAR作成
Maven Shade Pluginを使ったUber-JAR作成

先生と生徒の会話形式で理解しよう

生徒

「Jakarta EEのアプリケーションをひとつのJARにまとめる方法ってありますか?」

先生

「ありますよ。Maven Shade Pluginを使えば、全ての依存ライブラリをひとつのJARにまとめた“Uber-JAR”を作ることができます。」

生徒

「それを使うと、Jakarta EEのWebアプリケーションも簡単に実行できるんですか?」

先生

「そのとおり。依存関係の競合解決や、実行可能JARの作成も可能です。それでは、使い方を詳しく見ていきましょう。」

1. Maven Shade Pluginとは?

1. Maven Shade Pluginとは?
1. Maven Shade Pluginとは?

Maven Shade Pluginは、Apache Mavenで使用できる公式プラグインの一つで、複数のJARファイル(依存ライブラリなど)を一つにまとめた実行可能なUber-JARを作成するために使われます。

Jakarta EEのようなJava EE仕様に準拠したアプリケーションでも、自己完結型のJARを作ることで、実行環境への依存を減らし、移植性の高いアプリケーションに仕上げることができます。

2. Uber-JARのメリットと利用シーン

2. Uber-JARのメリットと利用シーン
2. Uber-JARのメリットと利用シーン

Uber-JAR(Fat JAR)は、アプリケーション本体と全ての依存ライブラリを含んだJARファイルです。これにより、次のようなメリットがあります。

  • Jakarta EEの依存関係を気にせずに単体実行できる
  • Java環境さえあればどこでも動く
  • Dockerなどと組み合わせてデプロイしやすい
  • シンプルなjava -jarコマンドで実行可能

特に、軽量なJakarta EEアプリケーションや、マイクロサービス形式での展開に最適です。

3. Maven Shade Pluginの導入方法

3. Maven Shade Pluginの導入方法
3. Maven Shade Pluginの導入方法

まずは、Jakarta EEプロジェクトのpom.xmlにMaven Shade Pluginを追加します。以下のように設定することで、パッケージ時にUber-JARを生成できます。


<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.4</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <createDependencyReducedPom>false</createDependencyReducedPom>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>com.example.Main</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

<mainClass>には、Jakarta EEアプリケーションのエントリーポイントを指定しましょう。

4. Jakarta EEとUber-JARの相性

4. Jakarta EEとUber-JARの相性
4. Jakarta EEとUber-JARの相性

Jakarta EEでは本来、WARやEARの形式でアプリケーションをデプロイしますが、Payara MicroやWildFly Bootable JARのように、自己完結型の実行環境を持つ軽量サーバーを使えば、Uber-JAR化の恩恵を受けられます。

Shade Pluginを使って依存JARをまとめておけば、Jakarta EE用のアプリケーションサーバーに対する事前構成を気にせず、素早く実行環境を構築できます。

5. Uber-JARのビルドと実行手順

5. Uber-JARのビルドと実行手順
5. Uber-JARのビルドと実行手順

Uber-JARの作成はとても簡単で、以下のコマンド一つで行えます。


mvn clean package

すると、targetディレクトリにxxx-shaded.jarのようなファイルが生成されます。

実行は以下のようにシンプルです。


java -jar target/myapp-shaded.jar

これだけで、Jakarta EEの実行環境込みのアプリケーションがすぐ起動します。

6. 複数ライブラリの競合に注意

6. 複数ライブラリの競合に注意
6. 複数ライブラリの競合に注意

Uber-JAR化では、複数のライブラリに同一のリソースファイルやクラスが存在することで、依存関係の衝突が起こることがあります。

Maven Shade Pluginでは、そのような衝突を解消するためにrelocationsを使うことができます。例えば、ライブラリのパッケージ名を変更して衝突を回避できます。


<relocations>
    <relocation>
        <pattern>com.google.common</pattern>
        <shadedPattern>shaded.com.google.common</shadedPattern>
    </relocation>
</relocations>

これにより、Jakarta EEプロジェクトでも安全に外部ライブラリを含めたUber-JARを作成できます。

7. Maven Shade Pluginのよくある設定例

7. Maven Shade Pluginのよくある設定例
7. Maven Shade Pluginのよくある設定例

Jakarta EEでの使用例として、Payara Microと組み合わせる場合の設定も紹介します。


<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.4</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <artifactSet>
                    <includes>
                        <include>fish.payara.micro:payara-micro</include>
                    </includes>
                </artifactSet>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>fish.payara.micro.PayaraMicro</mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

このように、Payara Microを含めた自己実行可能なJakarta EEアプリケーションを構築できます。

8. Maven Shade PluginとJakarta EEの今後

8. Maven Shade PluginとJakarta EEの今後
8. Maven Shade PluginとJakarta EEの今後

近年のクラウドネイティブな流れでは、WARやEARよりも、軽量でポータブルなUber-JARのニーズが増しています。特にJakarta EEを使ったマイクロサービス開発では、Maven Shade Pluginを活用することで、コンテナ対応やCI/CDの自動化にも柔軟に対応できます。

Jakarta EEアプリケーションのビルド自動化や、ローカル実行テスト環境構築にも大きく貢献してくれるツールです。

カテゴリの一覧へ
新着記事
New1
Play Framework
Play Framework多言語対応テンプレート完全ガイド!i18nの実装方法を解説
New2
Play Framework
Play Frameworkで学ぶAjaxリクエスト!初心者でもわかる連携方法と実践テクニック
New3
Jakarta EE
Jakarta EE JSPでファイルアップロードをわかりやすく解説!初心者向けガイド
New4
Jakarta EE
Jakarta EEとOAuth2の基本を初心者向けに解説 セキュリティ強化と認証連携の導入メリット
人気記事
No.1
Java&Spring記事人気No1
Jakarta EE
Jakarta EEとSpringの比較|どちらを選ぶべきか?初心者向けに徹底解説!
No.2
Java&Spring記事人気No2
Jakarta EE
Jakarta サーブレットのHttpServletRequestを徹底解説!初心者でもわかる基本操作と使い方
No.3
Java&Spring記事人気No3
Jakarta EE
Jakarta EEとJava EEアプリの互換性を完全解説!移行で困らないための基礎知識
No.4
Java&Spring記事人気No4
Jakarta EE
Jakarta EEとは?Java EEからの移行の歴史をやさしく解説
No.5
Java&Spring記事人気No5
Jakarta EE
Jakarta EEのリリースサイクルとバージョンの進化をやさしく解説!
No.6
Java&Spring記事人気No6
Play Framework
Play Frameworkでセッション管理と認証を連携!Java初心者向けログイン実装ガイド
No.7
Java&Spring記事人気No7
Play Framework
Play Frameworkでストリーミングレスポンスを実装する方法を完全解説!初心者向けリクエストとレスポンス入門
No.8
Java&Spring記事人気No8
Jakarta EE
Jakarta サーブレットのdoGetとdoPostの違いと使い分けを徹底解説!初心者でもわかるHTTPリクエスト処理