さっきのエントリー
で、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なんですけどね…