メモ:jdeps/jlinkによる縮小JREでは不足が出る
jdeps/jlinkではJREに不足がでる
JDK9で導入されたモジュール機能によるJREのコンパクト化ですが、限定的にしか使えないようです。
例えば次のコードを、通常のフルセットのJREで動かす試験とjdeps/jlinkを用いてコンパクト化したJREで動かす試験をします。
// HelloWorld2.java
import java.nio.charset.*;
public class HelloWorld2{
public static void main(String[]args_){
try{
Charset charSet_EUCJP = Charset.forName("EUC-JP");
System.out.println("OK");
}
catch(Exception _ex){
_ex.printStackTrace(System.err);
}
}
}
試験は次のバッチスクリプトで行いました。
- JDK8でビルドし
- JDK8環境
- JDK11によるコンパクトJRE
- JDK11でビルドし
- JDK11環境
- JDK11によるコンパクトJRE
jlinkによりコンパクトJREに取り込んだモジュールはjava.baseのみです。依存関係はjdepsで確認。
:: A12_test.bat @echo off set JDK8=C:\Program Files\Java\jdk1.8.0_152 set JDK11=C:\Program Files\Java\jdk-11 set JDEPS=C:\Program Files\Java\jdk-11\bin\jdeps set JLINK=C:\Program Files\Java\jdk-11\bin\jlink set JMODS=C:\Program Files\Java\jdk-11\jmods echo build JDK8 "%JDK8%\bin\javac" HelloWorld2.java echo "%JDEPS%" --list-deps HelloWorld2.class "%JDEPS%" --list-deps HelloWorld2.class rd /q /s jre > NUL 2>&1 echo "%JLINK%" --compress=2 --module-path "%JMODS%" --add-modules java.base --output jre "%JLINK%" --compress=2 --module-path "%JMODS%" --add-modules java.base --output jre echo run with JDK8 "%JDK8%\bin\java" HelloWorld2 echo run with mini-jre jre\bin\java HelloWorld2 echo build JDK11 "%JDK11%\bin\javac" HelloWorld2.java echo "%JDEPS%" --list-deps HelloWorld2.class "%JDEPS%" --list-deps HelloWorld2.class rd /q /s jre > NUL 2>&1 echo "%JLINK%" --compress=2 --module-path "%JMODS%" --add-modules java.base --output jre "%JLINK%" --compress=2 --module-path "%JMODS%" --add-modules java.base --output jre echo run with JDK11 "%JDK11%\bin\java" HelloWorld2 echo run with mini-jre jre\bin\java HelloWorld2 pause
動作させると次の結果が得られます。
build JDK8 "C:\Program Files\Java\jdk-11\bin\jdeps" --list-deps HelloWorld2.class java.base "C:\Program Files\Java\jdk-11\bin\jlink" --compress=2 --module-path "C:\Program Files\Java\jdk-11\jmods" --add-modules java.base --output jre run with JDK8 OK run with mini-jre java.nio.charset.UnsupportedCharsetException: EUC-JP at java.base/java.nio.charset.Charset.forName(Charset.java:529) at HelloWorld2.main(HelloWorld2.java:6) build JDK11 "C:\Program Files\Java\jdk-11\bin\jdeps" --list-deps HelloWorld2.class java.base "C:\Program Files\Java\jdk-11\bin\jlink" --compress=2 --module-path "C:\Program Files\Java\jdk-11\jmods" --add-modules java.base --output jre run with JDK11 OK run with mini-jre java.nio.charset.UnsupportedCharsetException: EUC-JP at java.base/java.nio.charset.Charset.forName(Charset.java:529) at HelloWorld2.main(HelloWorld2.java:6) 続行するには何かキーを押してください . . .
と、いうことでどうやれば、Charset.forName("EUC-JP")を動作させることができるのか、現時点では分かっていません。
| 固定リンク

