« メモ:Java8とJava11の差 | トップページ | 緊急メモ:Java-XMLでHTTPタイムアウト »

メモ: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")を動作させることができるのか、現時点では分かっていません。

|

« メモ:Java8とJava11の差 | トップページ | 緊急メモ:Java-XMLでHTTPタイムアウト »

トラックバック


この記事へのトラックバック一覧です: メモ:jdeps/jlinkによる縮小JREでは不足が出る:

« メモ:Java8とJava11の差 | トップページ | 緊急メモ:Java-XMLでHTTPタイムアウト »