プロジェクト

全般

プロフィール

Jigsaw試行錯誤

JDK 9 EA

build 9-ea+174 でお試し

ソース構成は次です。

work
+-- classes
+-- src
      +-- module-info.java
      +-- com
            +-- torutk
                  +-- hello
                        +-- HelloApp.jar

module-info.javaの中身は次です。

module com.torutk.hello {
    requires javafx.controls;
    requires javafx.graphics;
    exports com.torutk.hello;
}

HelloApp.jar は、JavaFXで空ウィンドウ表示を表示するだけの小さなサンプルです。

コンパイル

work$ javac -d classes --source-path src module-info.java com/torutk/hello/HelloApp.java
javac: ファイルが見つかりません: module-info.java

あれ、エラーだ。よく考えれば--source-pathオプションはコンパイル対象ソースコードの中で参照されている型のソースコードを検索するときの基点となる場所を指定するものだから、javacのコマンドラインオプションに直に指定するコンパイル対象ソースファイルのパスには影響しないのですね。

work> javac -d classes --source-path src src\module-info.java src\com\torutk\hello\HelloApp.java

これならコンパイルできました。でも--souce-pathを指定する意味はあるのかな。

work> javac -d classes --source-path src src\com\torutk\hello\HelloApp.java

module-info.java の指定を省略した際に、--source-pathを検索するのか実験してみたところ、検索されてコンパイルされました。
(classesの下はきれいに削除してから確認した)

モジュールJARの作成

work> jar --create --file ..\modules\hello.jar -C classes .

--create --fileは、cfと一緒です。

生成されたら、モジュールJARの情報を確認

work> jar -d --file=..\modules\hello.jar 
com.torutk.hello jar:file:///C:/Users/torutk/Documents/work/../modules/hello.jar/!module-info.class
exports com.torutk.hello
requires java.base mandated
requires javafx.controls
requires javafx.graphics

モジュールJARの実行

work> java --module-path ..\modules -m com.torutk.hello/com.torutk.hello.HelloApp

画面が表示されました。

  • ここで、モジュール名/FQCN名 の区切りの'/'は、Windows OSのパス区切りではないので、スラッシュにします。

カスタムJREの生成

work> jlink --module-path ..\modules;"%JAVA_HOME%\jmods" --add-modules com.torutk.hello --output hello

ここで環境変数JAVA_HOMEには、JDKをインストールしたディレクトリが設定されているものとします。

work> echo %JAVA_HOME%
C:\Program Files\Java\jdk-9

実行すると、--outputオプションで指定したhelloディレクトリに次のディレクトリ群が生成されます。

bin
conf
include
legal
lib
release

容量は、80MBとかなりのものです。

work> hello\bin\java --list-modules
com.torutk.hello
java.base@9-ea
java.datatransfer@9-ea
java.desktop@9-ea
java.prefs@9-ea
java.xml@9-ea
javafx.base@9-ea
javafx.controls@9-ea
javafx.graphics@9-ea
jdk.jsobject@9-ea

JRE 9のディレクトリ容量は200MBなので、それでも半分以下に削減されています。

クリップボードから画像を追加 (サイズの上限: 1 GB)