概要
Java 9 以降では Project Jigsaw によるモジュール化によって配布用の軽量 JRE が簡単に作れるようになりました。
軽量 JRE はアプリケーションで使用する必要最低限の機能のみを含むため、ファイルサイズを非常に小さく抑えることができます。
そのため、アプリケーションに JRE をバンドルする際などには必須の対応といえます。
本記事では軽量 JRE の作り方について説明します。
手順
1. OpenJDK の入手
まずは OpenJDK を入手します。
今回は、2019/02/08 時点で最新の安定板である OpenJDK 11 を使用します。
ZIP ファイルを展開すると以下のフォルダ構成となります。
jdk-11
├─ bin
├─ conf
├─ include
├─ jmods
├─ legal
├─ lib
└─ release
軽量 JRE の生成には bin
フォルダと jmods
フォルダを使用します。
2. 依存関係のチェック
jdk-11/bin
フォルダに含まれている jdeps
コマンドでアプリケーション(jarファイル)で使用されているパッケージの依存関係を確認します。(*.jar のようにワイルドカードでの指定も可能です)
cd jdk-11\bin
jdeps.exe --list-deps --ignore-missing-deps C:\example\app.jar
コマンドを実行すると、そのアプリケーションで使用されているパッケージの一覧が表示されます。
上記の app.jar
の例では以下のパッケージに依存していることが分かります。
java.base
java.desktop
java.logging
java.sql
java.xml
つまり、アプリケーションを動かすために最低限これらのパッケージが JRE に含まれていれば Java 実行環境として成立するということです。
3. 特定のパッケージのみを含む JRE の生成
jdeps
コマンドによりアプリケーションで使用しているパッケージの一覧が確認できたので、これらのパッケージのみを含む JRE を生成します。
JRE の生成は jlink
コマンドに必要なパッケージを渡すだけです。
複数のパッケージを渡す場合はカンマで区切ります。
jlink.exe --compress=2 --module-path ..\jmods --add-modules java.base,java.desktop,java.logging,java.sql,java.xml --output jre
コマンドを実行すると、カレントフォルダ内に jre
フォルダが生成されます。
生成されたこのフォルダは軽量 JRE となっています。
あとは、この軽量 JRE をアプリケーションの Java 実行環境として使用するだけです。
アプリケーション側の改修などにより新たなパッケージに依存しない限りは問題なく使用できます。
ファイルサイズの比較
OpenJDK 11 の オリジナル版
と特定のパッケージ 1 のみを含む 軽量版
の JRE のファイルサイズを比較したところ以下の結果となりました。
オリジナル版 | 軽量版 |
---|---|
299M | 46M |
軽量版の JRE にはアプリケーションで使用する必要最低限のパッケージのみを含んでいるため、ファイルサイズが小さく抑えられています。
ファイルサイズに大きな差がありますので、アプリケーションに JRE をバンドルする際は、軽量 JRE を生成してからバンドルすることをおすすめします。
-
java.base、java.desktop、java.logging、java.sql、java.xml ↩