jdk.charsets
モジュールはjava.base
にない Charset を提供します。
このモジュールには、2バイト文字とIBM文字セットなどが含まれます。
このモジュールは明示的に指定しないとランタイムイメージに含まれないので、例えば windows-31j
などを扱った場合に以下のような例外になります。
java.nio.charset.UnsupportedCharsetException: windows-31j at java.base/java.nio.charset.Charset.forName(Unknown Source)
jdk.charsets
モジュールを含めたい場合は、jlink
コマンドの --add-modules
オプションで指定します。
--add-modules jdk.charsets
Gradle で jlink プラグインを使用している場合は、以下のように options
で指定します。
plugins { // ... id("org.beryx.jlink") version "3.1.1" } jlink { options = listOf("--strip-debug", "--compress", "zip-0", "--no-header-files", "--no-man-pages", "--add-modules", "jdk.charsets") // ... }
- strip-debug: 出力イメージからデバッグ情報を取り除きます
- compress: リソースの圧縮を指定します
- no-header-files: ヘッダー・ファイルを除外します
- no-man-pages: マニュアル・ページを除外します
--compress
で指定可能な値は、zip-[0-9]
となっており、zip-0
は圧縮無しで、zip-9
は最も高い圧縮率を提供します(デフォルトzip-6
)。旧来は [0-2]
で指定しており、0
は圧縮なし、1
は定数文字列共有、2 はzip-6
と同等となっていましたが、現在は非推奨です。
Gradle で jlink プラグインについては以下を参照してください。