LoginSignup
19
21

More than 5 years have passed since last update.

配布用の軽量 JRE の作り方

Posted at

概要

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 を生成してからバンドルすることをおすすめします。


  1. java.base、java.desktop、java.logging、java.sql、java.xml 

19
21
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
21