Java jpackage アプリ 配布 dmg パッケージ 作成

今回は、Java14で追加されたjpackageを使った際のメモです。
簡単なアプリを作成して、Mac用にビルドしてみたいと思います。

jpackage swing java

アプリの仕様は簡単に、CPU・メモリの使用率を表示させるGUIアプリ(Swing)にしてみようと思います。
雑ですみませんが、確認様なのでパフォーマンスなどは考慮しません。

環境・バージョン

  • MacOS:Sonoma 14.6
  • openjdk :19.0.2
  • IntelliJ IDEA:2024.2 (Ultimate Edition)

サンプルプログラム

import javax.swing.*;
import java.awt.*;
import java.lang.management.ManagementFactory;
import com.sun.management.OperatingSystemMXBean;
import java.util.Timer;
import java.util.TimerTask;

public class ResourceMonitorApp {

private JFrame frame;
private JLabel cpuLabel;
private JLabel memoryLabel;
private OperatingSystemMXBean osBean;

public ResourceMonitorApp() {
    // OperatingSystemMXBeanを取得してシステム情報を取得する
    osBean = ManagementFactory.getPlatformMXBean(OperatingSystemMXBean.class);

    // GUIコンポーネントの初期化
    frame = new JFrame("Resource Monitor");
    cpuLabel = new JLabel("CPU Usage: ");
    memoryLabel = new JLabel("Memory Usage: ");

    // レイアウト設定
    frame.setLayout(new GridLayout(2, 1));
    frame.add(cpuLabel);
    frame.add(memoryLabel);
    frame.setSize(300, 100);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);

    // タイマーで定期的にCPU・メモリ使用率を更新
    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            updateResourceUsage();
        }
    }, 0, 1000); // 1秒ごとに更新
}

// CPUとメモリ使用率の更新
private void updateResourceUsage() {
    double cpuLoad = osBean.getCpuLoad() * 100; // CPU使用率 (0.0~1.0)
    long totalMemory = osBean.getTotalMemorySize();
    long freeMemory = osBean.getFreeMemorySize();
    long usedMemory = totalMemory - freeMemory;

    // Swingコンポーネントを更新
    SwingUtilities.invokeLater(() -> {
        cpuLabel.setText(String.format("・CPU Usage: %.2f%%", cpuLoad));
        memoryLabel.setText(String.format("・Memory Usage: %d MB / %d MB",
        usedMemory / (1024 * 1024), totalMemory / (1024 * 1024)));
    });
}

  public static void main(String[] args) {
      // GUIアプリケーションの起動
      SwingUtilities.invokeLater(ResourceMonitorApp::new);
  }
}

実行して、正常に動作することを確認しておきます。

jpackage swing java

ビルド準備

dmgファイルを作成するために前準備をします。
事前にjarとアプリのアイコン用の画像を用意します。

jar作成

当然ですが、jarの作成の前にビルドを行います。
IDEの機能でも良いですし、コマンドでも良いです。

javac -d out src/*.java

エラーチェック有り

javac -d out -Xlint:deprecation src/*.java

jpackage swing java comple

 

jar作成は以下などで行えます。

jar –create –file 出力パス/jarファイル名 –main-class メインクラス名 -C メインクラス基準パス アーカイブ対象パス

jar --create --file out/build/ResourceMonitorApp.jar --main-class ResourceMonitorApp -C out/ .

–create: 新しいJARファイルを作成するオプション。
–file out/build/ResourceMonitorApp.jar: 出力するJARファイルのパスと名前を指定。
–main-class ResourceMonitorApp: JARファイルのエントリーポイントとなるメインクラスを指定。
-C out/ .: outディレクトリを基準にして、すべてのファイルをJARに追加。

jpackage swing create jar

画像用意

アプリのアイコン等で表示する画像を用意します。
画像はicns形式で用意します。今回は、縦横128pxでトライしてみます。
サイズや細かなベストプラクティスはAppleが開発者向けに公開している情報などを参考にしてください。
https://developer.apple.com/jp/design/human-interface-guidelines/app-icons#App-icon-sizes

アプリビルド

準備ができたら、jpackageコマンドでdmgファイルを作成します。

jpackage --input . --main-jar out/build/ResourceMonitorApp.jar --main-class ResourceMonitorApp --name "ResourceMonitorApp" --icon img/cpu-memory-checker-128x.icns --type dmg --dest out/build/dmg

–input .: 入力ファイルのディレクトリを指定。ここではカレントディレクトリ。
–main-jar out/build/ResourceMonitorApp.jar: メインとなるJARファイルを指定。
–main-class ResourceMonitorApp: アプリケーションのエントリーポイントとなるメインクラスを指定。
–name “ResourceMonitorApp”: パッケージ化されたアプリケーションの名前を指定。
–icon img/CPU-Memory-Checker-200x.icns: アプリケーションのアイコンファイルを指定。
–type dmg: 出力するパッケージの形式を指定。ここではmacOSのディスクイメージ(DMG)。
–dest out/build/dmg: 出力先ディレクトリを指定。

特にエラーがなければdmgファイルが生成されます。

jpackage swing java create dmg

jpackage swing java create dmg


アプリ起動確認

dmgファイルを作成できたら、ダブルクリック等で起動します。

jpackage swing java dmg

アプリがマウントされたら、/Applicationsにインストールします。

jpackage swing java dmg

インストールされたら、Launchpadなどでも表示されると思います。

jpackage swing java dmg

正常に動作することを確認します。

jpackage swing java dmg


今回のメモは異常です。
今回はSwingで簡易的なGUIを実装しましたが、
JavaFXなどでも問題なく動作すると思います。

都内でエンジニアをやっています。 2017年に脱サラ(法人設立)しました。 仕事で調べたことや、気になったことをメモしています。
投稿を作成しました 192

コメントを残す

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

CAPTCHA


関連投稿

検索語を上に入力し、 Enter キーを押して検索します。キャンセルするには ESC を押してください。

トップに戻る