Javaをexe化してみる(3)環境構築とJMODSを追加する

この回について

前回は、EXE化(パッケージング)に向けた「5段構え」の工程についてお話ししました。
今回は、実際にバッチファイルを動かす前に絶対に避けては通れない、「環境構築」について解説します。

特に、通常の開発ではあまり使わない「JMODS」というものが、EXE化には不可欠になります。

1. 必要な「材料」を揃える

今回のシステムを動かすために、以下の4つを準備します。Java関係のバージョンは基本的に揃えましょう(その時の新しいバージョンで)。

  • JDK 25:Java本体。
  • JavaFX SDK 25.0.1:JavaFXのライブラリ(jarファイル群)。通常の開発で使用するもの。
  • JavaFX JMODS 25.0.1【最重要】jpackageがEXEの中にJavaFXを組み込むために使用するモジュール形式のファイル群。
  • JInput:ジョイスティック操作に必要なライブラリ。

2. なぜ「JMODS」が必要なのか?

通常のプログラム実行なら、SDKの中にある「jarファイル」をクラスパスに通せば動きます。
しかし、jpackageを使って「JavaがインストールされていないPCでも動くEXE」を作るには、
Javaの機能を「モジュール」として切り出して同梱する必要があります。

この「同梱するための専用パーツ」がJMODS(Java Modules)です。
これを用意しておかないと、パッケージングの工程(ステップ4)で「モジュールが見つかりません」というエラーが出て、EXE化に失敗してしまいます。

JDK側は準備万端

jpackageを使ってEXEを作る際、
内部では「必要なモジュールだけをかき集めて、最小限のJava実行環境を再構築する」という作業が行われています。

実は、Java本体(JDK)の標準機能(java.basejava.loggingなど)については、
JDKをインストールした時点ですでにJMODS形式のファイルが同梱されています。
そのため、標準機能だけで作られたプログラムなら、特に追加の準備は不要です。

JavaFXは「外付け」だから必要

しかし、JavaFXは現在のJava(JDK 11以降)では標準から切り離され、「外部ライブラリ」という扱いになっています。

EXE化の工程で、標準機能と同じようにJavaFXを「モジュール」として組み込むためには、
JDKが持っている標準モジュール群と同じ形式(JMODS)のファイルが、JavaFX用にも別途必要になるのです。

つまり、「標準パーツ(JDK)は揃っているけれど、
オプションパーツ(JavaFX)も同じ規格の部品として用意してあげないと、
一つのパッケージにまとめられない」
ということなのです。

3. フォルダ配置の推奨例

後ほど紹介するバッチファイルでは、以下のような配置を想定しています。 あらかじめこのように整理しておくと、設定がスムーズです。

C:\Java
├─jdk-25.0.1
├─javafx-sdk-25.0.1
└─javafx-jmods-25.0.1 ← ここにJMODSを解凍!

4. JMODSの入手方法

JavaFXの総本山である「Gluon」のサイトなどからダウンロードできます。
https://gluonhq.com/products/javafx/
SDKをダウンロードした場所のすぐ近くに「JMODS」という選択肢があるはずです。
必ずSDKと同じバージョン、同じアーキテクチャ(x64など)を選んでください。

これで、EXEを作るための準備が整いました。
次はいよいよ、これらを一気に組み上げる「Exeで動くバッチファイル」の中身を見ていきましょう。

シリーズリンク

Javaコンパイルしたモジュールをexe化してみる(1)Javaがexe化するに至った経緯を振り返る。
Javaコンパイルしたモジュールをexe化してみる(2)EXE化への「5段構え」の工程
Javaをexe化してみる(3)環境構築とJMODSを追加する
Javaをexe化してみる(4)バッチファイルで自動化しパッケージングする

シェアしていただけるとうれしいです。