Javaをexe化してみる(2)- jpackageの活用 と 自動化バッチの紹介 -

前回の「(1)」では概要をお伝えしましたが、
今回は実際に配布可能なExeファイルを作るための「自動化バッチ」の中身を詳しく解説します。

1. なぜ「jpackage」なのか?

Java 14から導入された jpackage は、**「実行環境(JRE)を同梱できる」**点にあります。

以前のようにユーザーに「Javaをインストールしてください」とお願いする必要がなく、
配布したフォルダ内のexeを叩くだけで動く、現代的な配布形態が可能です。

ただ、ファイルサイズがけっこう大きくなります。

2. ビルドを行うバッチファイル(makeExe.bat)

私が今回のシミュレーターで使用したバッチファイルを紹介します。


@echo off
setlocal
echo === Java EXE Build System (JDK 25) ===

REM (1)事前準備
REM 環境変数で一括管理
REM 自分自身の環境に合わせて修正してください
echo [1-1] 環境変数設定...
set JAVA_HOME=C:\Java\jdk-25.0.1
set APP_NAME=SolarSystemSim
set MAIN_CLASS=SolarSystemSim
set VERSION=1.0.0

REM 必要なフォルダを作成
echo [1-2] フォルダ作成...
if not exist "out" mkdir "out"
if not exist "dist" mkdir "dist"
if not exist "release" mkdir "release"

REM (2)コンパイル
echo [2] コンパイル中...
"%JAVA_HOME%\bin\javac" ^
  -d out *.java

REM (3)「dist」フォルダへjarファイルを集約
echo [3] distフォルダ構築 jarファイル作成中。
echo Main-Class: %MAIN_CLASS% > manifest.txt
"%JAVA_HOME%\bin\jar" cvfm dist\%APP_NAME%.jar manifest.txt -C out .

REM (4)パッケージング。EXE化
echo [4] パッケージ作成中 (app-image)...
"%JAVA_HOME%\bin\jpackage" ^
  --name "%APP_NAME%" ^
  --type app-image ^
  --win-console ^
  --input dist ^
  --dest "release" ^
  --main-jar "%APP_NAME%.jar" ^
  --main-class "%MAIN_CLASS%" ^
  --vendor "KIN"

echo === 全工程完了! release\%APP_NAME% 内の %APP_NAME%.exe を実行してください ===
pause

3. ポイント解説

jar化は必須

jpackageはJARファイルを入力として受け取るため、この工程は必須です。
この際、マニフェストファイルを使用して、アプリの起動地点(Main-Class)を明示するのがポイントです。

–type app-image

インストーラーではなく、実行に必要なファイル群を一つのフォルダにまとめます。ポータブルに持ち運びたい場合に最適です。
インストーラにしたい場合は、
–type exe
–type msi
にしてください。
わたしはインストールするまではちょっと・・・って感じでフォルダにまとめるところまでにしています。

–win-console の役割

これを入れると、アプリ(exe)を起動した瞬間に、背後で「コマンドプロンプト(黒い画面)」が一緒に立ち上がるようになります。

入れるメリット(デバッグ用):

プログラムの中で System.out.println(“天体の計算開始…”); のように書いているメッセージが、その黒い画面にリアルタイムで表示されます。
もしエラーで落ちた時も、そこにエラーメッセージ(スタックトレース)が残るので、「なぜ動かないのか」を突き止めるのに必須です。

入れないメリット(製品用):

純粋にシミュレーターの画面だけがポーンと立ち上がります。
一般ユーザーからすると「余計な黒い画面が出ない」ので、見た目がスッキリして「完成品」っぽく見えます。
デバッグが済んだら、取っちゃう方がスマートでしょうね~。

今回の記事まとめ

Javaで太陽系天体シミュレーター&JavaをExe化してみました。(Java21以降対応)
Javaをexe化してみる(2)- jpackageの活用 と 自動化バッチの紹介 -
Javaのバーチャルスレッドを利用してみた(3)感想とゲーム利用の有効性について考察

Youtubeに載せました♪
https://youtu.be/NPsgNbhEtds

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

投稿者:

kinchannn

きんです。 よろしくおねがいいたします。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA