jpackageの踏み入った使い方

Red Hat のソリューションアーキテクトの瀬戸です。

概要

前回はjpackageの基本的な使い方を説明しました。

今回はもうちょっと踏み込んだ使い方を説明します。

前回の記事を読んでいない方は、先にそちらをお読みください。

rheb.hatenablog.com

よく使うパラメーターをまとめる

@[filename] を使用することでそのファイルの内容をパラメーターとして解釈させることができます。よく使用するパラメーターをファイルにすることでオプションを毎回入力しなくて済むようになります。

必要なパラメーターを追加で付けることもできます。同じパラメーターがファイルと引数の両方にあった場合は引数が優先されるようです。

> jpackage @option.txt --app-version 2.1

アプリケーションのアイコンとベンダーを指定する

Windowsインストーラーにはいくつかのメタデータが含まれていて、プログラムの追加と削除から表示することができます。

次のように引数を指定することでアイコンとベンダー名を指定することができます。

> jpackage @option.txt --icon shadowman.ico  --vendor "red hat"

これでだれが作ったアプリケーションか一目瞭然になるのではないでしょうか。 ちなみに、icoファイルはinputフォルダの下に置く必要はありません。

ベンダー名指定

Java ランタイムの軽量化

JDK 9以降はランタイムのモジュール化が図られており、必要なモジュールのみ配るように制限することでインストーラーのサイズを小さくすることができます。

jdepsを使用すると、必要としているモジュールが何かを判別することができます。

> jdeps --print-module-deps clientexample.jar
java.base,java.desktop

>jpackage @option.txt --add-modules java.base,java.desktop

jdepsの出力結果を --add-modules で指定しています。

今回のサンプルアプリケーションは依存しているものも少ないので、実際に半分のサイズになってしまいます。

moduleを指定した場合はインストーラーのサイズが半分に

アプリケーションのアップデートへの対応

Windowsインストーラーは同じ製品のバージョン違いかどうかをUUID(もしくはGUID)を使って管理をしています。 インストーラーの作成時に、UUIDと製品バージョンを指定することで同じアプリケーションとして認識され、アップデート時に古いアプリケーションを同時に削除することが出来るようになります。 次のように指定します。

> jdeps --print-module-deps clientexample.jar
java.base,java.desktop

> jpackage @option.txt --app-version 2.0 --win-upgrade-uuid d5f22f98-52b1-4daa-b501-ad12535a5553

versionには細かい規定があります。詳しくはWiXのドキュメントを参照してください。 WiX チュートリアル 日本語訳 Lesson 4 アップグレードとモジュラー化

UUID(GUID)は世界中でユニークである必要のある値です。 Windowsの場合はPowerShellから生成できます。

> [Guid]::NewGuid()

Guid
----
d5f22f98-52b1-4daa-b501-ad12535a5553

ライセンスの追加

いわゆる使用許諾契約書を追加することができます。

> jpackage @option.txt --license-file .\licencefile.txt

Apache License 2.0をそのまま取り込んだ例が次の画像です。 https://www.apache.org/licenses/LICENSE-2.0.txt

残念なことに現時点では改行が崩れてしまっています。 また、日本語には対応していないようです。 きれいに見せるためにはなかなか骨が折れそうです。

Apache License 2.0を取り込んだところ

さらなるカスタマイズ

いままではjpackageの標準的なオプションの中でできることを見てきました。しかし、内部で使っているWiXを直接扱うことでさらなるカスタマイズができます。

--temp--verbose のオプションを付けることで、WiX用の設定ファイルの保存と、WiXの実行時に指定されるコマンドを出力することができます。

--tempと--verboseを指定した場合

インストーラーの見た目をカスタマイズしたい場合はこれらを使用することでお好きなインストーラーを作成することができます。

その場合はWiXのマニュアルを参照しながらカスタマイズをしてください。また、Windowsインストーラーには署名もできますが、jpackageでは対応していないようです。 必要に応じてWindowsインストーラーのドキュメントを参照して署名を行ってください。

WiX チュートリアル 日本語訳 Lesson 4 アップグレードとモジュラー化

Windows インストーラー - Win32 apps | Microsoft Learn

まとめ

駆け足でしたがjpackageの踏み込んだ使い方を説明してきました。説明できていないオプション類もたくさんありますので、ぜひ興味がある人は試してみてください。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。