さっきのエントリー
で、LTしてきたと書いたのですが、その際に、Jigsawのモジュールがどのように分割されたのか気になったので、調べてみました。
なお、クラス数が膨大なので、このエントリーには載せません。
上記リポジトリーのg3-mod-apiというディレクトリーに以下の二つのファイルが有ります。
上記のリポジトリーをクローンするなり、ダウンロードするなりして、確認してみてください。
module-list.txt
- モジュールの一覧module-files.txt
- モジュールに含まれるクラスファイルの一覧
module-files.txt
ファイルを調べれば、Jigsawを利用した時にrequire
するべきモジュールがわかると思います。例えばjava.sql.Driver
を利用する場合などは、
$ grep "java/sql/Driver" module-files.txt build/mods/java.sql.jmod/classes/java/sql/Driver.class build/mods/java.sql.jmod/classes/java/sql/DriverAction.class build/mods/java.sql.jmod/classes/java/sql/DriverInfo.class build/mods/java.sql.jmod/classes/java/sql/DriverManager$1.class build/mods/java.sql.jmod/classes/java/sql/DriverManager$2.class build/mods/java.sql.jmod/classes/java/sql/DriverManager.class build/mods/java.sql.jmod/classes/java/sql/DriverPropertyInfo.class
と出てくるので、require java.sql.jmod;
という記述をmodule-info.java
に追加すればよいことになります。
また、Nashornを利用したい場合などは、
$ grep "javax/script/ScriptEngineManager" module-files.txt build/mods/java.scripting.jmod/classes/javax/script/ScriptEngineManager$1.class build/mods/java.scripting.jmod/classes/javax/script/ScriptEngineManager.class
と出てくるので、require java.scripting.jmod;
という記述をmodule-info.java
に追加すれば良いことになります。
まあ、JDK9が出たら、その辺りはIDEが対応してくれると思うので、それまでの間は上のやつを使ってみてください。
おわり
【2015/11/29 2:56 追記】
さくらばさんからツッコミをもらいました。
java -listmods
でモジュールの一覧が取得できる
実行結果は以下のとおり。
$ jdk1.9.0.jdk/Contents/Home/bin/java -listmods java.activation@9.0 java.annotations.common@9.0 java.base@9.0 java.compact1@9.0 java.compact2@9.0 java.compact3@9.0 java.compiler@9.0 java.corba@9.0 java.datatransfer@9.0 java.desktop@9.0 java.instrument@9.0 java.logging@9.0 java.management@9.0 java.naming@9.0 java.prefs@9.0 java.rmi@9.0 java.scripting@9.0 java.se@9.0 java.security.jgss@9.0 java.security.sasl@9.0 java.smartcardio@9.0 java.sql@9.0 java.sql.rowset@9.0 java.transaction@9.0 java.xml@9.0 java.xml.bind@9.0 java.xml.crypto@9.0 java.xml.ws@9.0 javafx.base@9.0 javafx.controls@9.0 javafx.deploy@9.0 javafx.fxml@9.0 javafx.graphics@9.0 javafx.media@9.0 javafx.swing@9.0 javafx.web@9.0 jdk.accessibility@9.0 jdk.attach@9.0 jdk.charsets@9.0 jdk.compiler@9.0 jdk.crypto.ec@9.0 jdk.crypto.pkcs11@9.0 jdk.deploy@9.0 jdk.deploy.osx@9.0 jdk.hotspot.agent@9.0 jdk.httpserver@9.0 jdk.internal.le@9.0 jdk.internal.opt@9.0 jdk.jartool@9.0 jdk.javadoc@9.0 jdk.javaws@9.0 jdk.jcmd@9.0 jdk.jconsole@9.0 jdk.jdeps@9.0 jdk.jdi@9.0 jdk.jdwp.agent@9.0 jdk.jfr@9.0 jdk.jlink@9.0 jdk.jvmstat@9.0 jdk.localedata@9.0 jdk.management@9.0 jdk.naming.dns@9.0 jdk.naming.rmi@9.0 jdk.pack200@9.0 jdk.plugin@9.0 jdk.plugin.dom@9.0 jdk.policytool@9.0 jdk.rmic@9.0 jdk.scripting.nashorn@9.0 jdk.scripting.nashorn.shell@9.0 jdk.sctp@9.0 jdk.security.auth@9.0 jdk.security.jgss@9.0 jdk.snmp@9.0 jdk.xml.bind@9.0 jdk.xml.dom@9.0 jdk.xml.ws@9.0 jdk.zipfs@9.0
jdeps
コマンドで使っているモジュールの一覧が取得できる
ためしに、Java8でコンパイルしたjarにjdepsをおこなってみた
$ jdk1.9.0.jdk/Contents/Home/bin/jdeps build/jars/test.frameworkJar/test.framework.jar test.framework.jar -> java.base test (test.framework.jar) -> java.lang -> java.lang.annotation -> java.lang.invoke -> java.util -> java.util.function -> java.util.stream -> test.exception test.framework.jar -> test.exec test.framework.jar test.exception (test.framework.jar) -> java.lang 以下略
このように出力された。また、クラスに対しても同様に
$ jdk1.9.0.jdk/Contents/Home/bin/jdeps build/classes/test.frameworkJar/test/exec/TestExecutor.class TestExecutor.class -> java.base TestExecutor.class -> 見つかりません test.exec (TestExecutor.class) -> java.lang -> java.lang.annotation -> java.lang.invoke -> java.lang.reflect -> java.util -> java.util.concurrent -> java.util.function -> java.util.stream -> test 見つかりません
という表示を得た。
また、さらに、-module
というオプションがあり、それを使うと、モジュール名のみを表示してくれるようである。
$ jdk1.9.0.jdk/Contents/Home/bin/jdeps -module build/jars/test.frameworkJar/test.framework.jar test.framework.jar -> java.base test (test.framework.jar) -> java.lang java.base -> java.lang.annotation java.base -> java.lang.invoke java.base -> java.util java.base -> java.util.function java.base -> java.util.stream java.base -> test.exception test.framework.jar -> test.exec test.framework.jar test.exception (test.framework.jar) -> java.lang java.base 以下略
ところで、僕が欲しいのは、java.sql.Driver
からjava.sql@9.0
なんですけどね…