先日、初めてJava9 Jigsaw に触れて四苦八苦したが、、、
Java9 Jigsaw モジュール参照側は結局すべてモジュールを引っ張れないとならない?! - Oboe吹きプログラマの黙示録
Java9 Jigsaw モジュール使用プログラムの実行 - Oboe吹きプログラマの黙示録
Java9 Jigsaw と Maven - Oboe吹きプログラマの黙示録
Eclipse WTP プロジェクトで失敗したのは、まだ module-info が作られていない JARファイルを
どう扱うかが、できてないからだ。
以下のようにすれば良い。
例えば、 mybatis Version 3.4.5 を使うとすると pom.xml で、たとえ他のJARで間接参照があって
その pom.xml で書いてあっても改めて pom.xml に書かないと、存在しないモジュール定義のJARでは
だめであった。
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency>
とコンパイルプラグインで、、--add-modules を書かなくてならず、
ここで指定する名が、存在しないモジュール宣言を強制的に宣言することになり、
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <source>9</source> <target>9</target> <compilerArgs> <arg>--add-modules mybatis</arg> <arg>--add-modules wasample</arg> </compilerArgs> </configuration> </plugin>
wasample は、このWTPプロジェクトでWARとしてつくる artifactId に相当。
作成している WTPプロジェクトの module-info.java で、
module org.wa.wsample{ requires mybatis; }
これは 自動でモジュール名を付ける約束として以下の約束で付けていくことになる。
http://download.java.net/java/jigsaw/docs/api/java/lang/module/ModuleFinder.html#of-java.nio.file.Path...-
mybatis.3.4.5.jar を参照するから、requires mybatis なのだ。
これを踏まえて苦労して、SL4J や、Wicket を含めると以下のとおり。。
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <source>9</source> <target>9</target> <compilerArgs> <arg>--add-modules sl4j-api</arg> <arg>--add-modules logback-core</arg> <arg>--add-modules logback-classic</arg> <arg>--add-modules wicket-core</arg> <arg>--add-modules wicket-request</arg> <arg>--add-modules wicket-devutils</arg> <arg>--add-modules wicket-extensions</arg> <arg>--add-modules wicket-guice</arg> <arg>--add-modules wicket-ioc</arg> <arg>--add-modules wicket-objectsizeof-agent</arg> <arg>--add-modules wicket-util</arg> <arg>--add-modules wicket-jquery-ui</arg> <arg>--add-modules jdk-serializable-functional</arg> <arg>--add-modules yipuran-wicketcustom</arg> <arg>--add-modules yipuran-wicketguice</arg> <arg>--add-modules yipuran-mybatis</arg> <arg>--add-modules guice</arg> <arg>--add-modules javax.inject</arg> <arg>--add-modules openjson</arg> <arg>--add-modules mybatis</arg> <arg>--add-modules wasample</arg> </compilerArgs> </configuration> </plugin>
この pom.xml での dependency の記述にも注意が必要になり、
コンパイル参照できなかったりする。
<dependencies> <dependency> <groupId>aopalliance</groupId> <artifactId>aopalliance</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>javax.inject</groupId> <artifactId>javax.inject</artifactId> <version>1</version> </dependency> <dependency> <groupId>org.danekja</groupId> <artifactId>jdk-serializable-functional</artifactId> <version>1.8.3</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency>
依存するJARの artifactId の中の区切り文字が、"-" であるので module-info,java では、"." に置きかえる。
module org.wa.wsample{ requires slf4j.api; requires jdk.serializable.functional; requires mybatis; requires wicket.core; requires wicket.request; requires wicket.devutils; requires wicket.extensions; requires wicket.guice; requires wicket.ioc; requires wicket.objectsizeof.agent; requires wicket.util; requires wicket.jquery.ui; requires guice; requires javax.inject; requires yipuran.wicketcustom; requires yipuran.wicketguice; requires yipuran.mybatis; }
これでようやく Jigsaw のコンパイル時のモジュール参照が、WTP - maven でもなんとかなるが、
それにしても、コンパイルの所謂、、もっさり感の重さは酷いものだ。