Java9 で、module-info を書いて、Maven で解決できない時、
Maven 依存関係が深くなってしまった場合、pom.xml でネストして書いていなかったものを
書けばコンパイルが通る。
実際の現象、、、
最初、pom.xml を以下のように記述していた。。
<properties> <wicket.version>8.0.0-M8</wicket.version> <guice.verison>4.1.0</guice.verison> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.apache.wicket</groupId> <artifactId>wicket-guice</artifactId> <version>${wicket.version}</version> </dependency> <dependency> <groupId>javax.inject</groupId> <artifactId>javax.inject</artifactId> <version>1</version> </dependency> <dependency> <groupId>com.google.inject</groupId> <artifactId>guice</artifactId> <version>${guice.verison}</version> </dependency> </dependencies>
Java のソースは、以下しかインポートしていないのに、
import org.apache.wicket.Application; import org.apache.wicket.Component; import org.apache.wicket.application.IComponentInstantiationListener; import org.apache.wicket.guice.GuiceInjectorHolder; import org.apache.wicket.injection.IFieldValueFactory; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.Module; import com.google.inject.Stage;
wicket-util.jar の中にある org.apache.wicket.util.IHierarchical が見つからないとエラーになる。
IHierarchical を使用するコード書いたつもりはなかったけど、どこで使われてるんだろう?
pom.xml の依存関係階層を見ると、
wicket-util.jarが wicket-guice → wicket-core → wicket-util. と依存している。
module-info.java には、
requires wicket.core; requires wicket.ioc; requires wicket.guice; requires javax.inject; requires guice;
を書いていたのだが、ここに、wicket.util を追加する。
requires wicket.core; requires wicket.ioc; requires wicket.guice; requires wicket.util; requires javax.inject; requires guice;
これで解決と思ったがこれだけではダメで、pom.xml の dependency に wicket-utilも追加する。
<dependency> <groupId>org.apache.wicket</groupId> <artifactId>wicket-util</artifactId> <version>${wicket.version}</version> </dependency>
これでコンパイルエラーにならないようになる。