gradleでjlinkを使う


はじめに

jlinkを使うとアプリ専用のJREができて、配布に便利。
というわけでgradleで使う方法を調べてみた。

プロジェクトの準備

とりあえず普通に

gradle init --type=java-application

で作る。

build.gradleの書き換え

最低限必要なのは、pluginsの項目に以下の行を追加すること。

id 'org.beryx.jlink' version '2.22.0'

これで、gradle jlink が使えるようになる。

また、デフォルトで入っている dependencies は消しておくと警告が消える。(数字で終わるモジュール名がいけないらしい)

その他、JDKのバージョンによっては、

The module name specified in 'application.mainModule' (null) has not the expected value

という警告が出る。これは、applicationの項目に

mainModule = 'module名'

を書いておくと消える。(module名は module-info.java で指定したもの)

jlink の項目を作って、optionを設定することも可能。例えば以下のように書ける。

jlink {
    options = ['--compress', '2', '--no-header-files', '--no-man-pages']
}

targetPlatformで複数のプラットフォーム用アプリを作ることもできる。この場合、各プラットフォーム用のJDKを用意しておく。

jlink {
    targetPlatform("mac") {
        jdkHome = "/usr/java/jdk-mac/Contents/Home"
    }
    targetPlatform("linux-x64") {
        jdkHome = "/usr/java/jdk"
    }
    targetPlatform("windows-x64") {
        jdkHome = "/usr/java/jdk-win"
    }
    options = ['--compress', '2', '--no-header-files', '--no-man-pages']
}

ビルド

gradle build

では、jlinkを使わずにjarができる。jlinkする場合は、以下のようにする。

gradle jlink

これで build ディレクトリの下に image ができ、その下のディレクトリがアプリになっている。
targetPlatformを指定している場合は、<プロジェクト名>-<ターゲットプラットフォーム名> のディレクトリができ、その下に置かれる。

アプリ実行のためには、bin ディレクトリで <プロジェクト名> の実行スクリプトがあるので、それを実行すれば良い。(Windows用の場合はbatファイル)

アプリの配布は bin, conf, legal, libの各ディレクトリをまとめて配布すればOK。
そのままコピーして、binの実行ファイルを実行すれば起動できる。