Java9 module-info 未対応 JAR の Maven 解決方法

先日、初めて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 でもなんとかなるが、
それにしても、コンパイルの所謂、、もっさり感の重さは酷いものだ。