I am working on a multi module Java 9 project that uses Spring Boot 2.0 with Hibernate. Furthermore I use Gradle 4.6 to build this multi module project. Since it is a greenfield project I'd love to start declaring Java 9 modules.
One of them is a domain module and it is defined as follows
module offer.server.domain {
requires java.sql;
requires hibernate.jpa;
requires hibernate.core;
exports some.package;
}
The module has the following dependencies:
compile - Dependencies for source set 'main' (deprecated, use 'implementation ' instead).
+--- org.mapstruct:mapstruct-jdk8 -> 1.2.0.Final
+--- project :mapping
| +--- org.mapstruct:mapstruct-jdk8 -> 1.2.0.Final
| \--- org.springframework:spring-context -> 5.0.4.RELEASE
| +--- org.springframework:spring-aop:5.0.4.RELEASE
| | +--- org.springframework:spring-beans:5.0.4.RELEASE
| | | \--- org.springframework:spring-core:5.0.4.RELEASE
| | | \--- org.springframework:spring-jcl:5.0.4.RELEASE
| | \--- org.springframework:spring-core:5.0.4.RELEASE (*)
| +--- org.springframework:spring-beans:5.0.4.RELEASE (*)
| +--- org.springframework:spring-core:5.0.4.RELEASE (*)
| \--- org.springframework:spring-expression:5.0.4.RELEASE
| \--- org.springframework:spring-core:5.0.4.RELEASE (*)
+--- org.springframework.data:spring-data-jpa -> 2.0.4.RELEASE
| +--- org.springframework.data:spring-data-commons:2.0.4.RELEASE
| | +--- org.springframework:spring-core:5.0.4.RELEASE (*)
| | +--- org.springframework:spring-beans:5.0.4.RELEASE (*)
| | \--- org.slf4j:slf4j-api:1.7.25
| +--- org.springframework:spring-orm:5.0.4.RELEASE
| | +--- org.springframework:spring-beans:5.0.4.RELEASE (*)
| | +--- org.springframework:spring-core:5.0.4.RELEASE (*)
| | +--- org.springframework:spring-jdbc:5.0.4.RELEASE
| | | +--- org.springframework:spring-beans:5.0.4.RELEASE (*)
| | | +--- org.springframework:spring-core:5.0.4.RELEASE (*)
| | | \--- org.springframework:spring-tx:5.0.4.RELEASE
| | | +--- org.springframework:spring-beans:5.0.4.RELEASE (*)
| | | \--- org.springframework:spring-core:5.0.4.RELEASE (*)
| | \--- org.springframework:spring-tx:5.0.4.RELEASE (*)
| +--- org.springframework:spring-context:5.0.4.RELEASE (*)
| +--- org.springframework:spring-aop:5.0.4.RELEASE (*)
| +--- org.springframework:spring-tx:5.0.4.RELEASE (*)
| +--- org.springframework:spring-beans:5.0.4.RELEASE (*)
| +--- org.springframework:spring-core:5.0.4.RELEASE (*)
| +--- org.aspectj:aspectjrt:1.8.12 -> 1.8.13
| \--- org.slf4j:slf4j-api:1.7.25
+--- org.hibernate:hibernate-core -> 5.2.13.Final
| +--- org.jboss.logging:jboss-logging:3.3.1.Final -> 3.3.2.Final
| +--- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final
| +--- org.javassist:javassist:3.22.0-GA
| +--- antlr:antlr:2.7.7
| +--- org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.0.1.Final
| +--- org.jboss:jandex:2.0.3.Final
| +--- com.fasterxml:classmate:1.3.0 -> 1.3.4
| +--- dom4j:dom4j:1.6.1
| \--- org.hibernate.common:hibernate-commons-annotations:5.0.1.Final
| \--- org.jboss.logging:jboss-logging:3.3.0.Final -> 3.3.2.Final
+--- org.javamoney:moneta -> 1.1
| +--- javax.money:money-api:1.0 -> 1.0.1
| \--- javax.annotation:javax.annotation-api:1.2 -> 1.3.1
\--- com.neovisionaries:nv-i18n -> 1.22
And in my Gradle build I declare the module path as follows:
compileJava {
doFirst {
inputs.property("moduleName", "offer.server.domain")
options.compilerArgs = [
'--module-path', classpath.asPath,
'--add-modules', 'java.se.ee'
]
classpath = files()
}
}
When I run gradle clean compileJava
I get the following error:
error: the unnamed module reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: the unnamed module reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: the unnamed module reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module org.mapstruct reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module org.mapstruct reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module org.mapstruct reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module spring.data.jpa reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module spring.data.jpa reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module spring.data.jpa reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module moneta reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module moneta reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module moneta reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module nv.i18n reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module nv.i18n reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module nv.i18n reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module spring.context reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module spring.context reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module spring.context reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module spring.data.commons reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module spring.data.commons reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module spring.data.commons reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module spring.orm reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module spring.orm reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module spring.orm reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module spring.aop reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module spring.aop reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module spring.aop reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module spring.jdbc reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module spring.jdbc reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module spring.jdbc reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module spring.tx reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module spring.tx reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module spring.tx reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module spring.beans reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module spring.beans reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module spring.beans reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module spring.expression reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module spring.expression reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module spring.expression reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module spring.core reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module spring.core reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module spring.core reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module aspectjrt reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module aspectjrt reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module aspectjrt reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module slf4j.api reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module slf4j.api reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module slf4j.api reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module hibernate.commons.annotations reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module hibernate.commons.annotations reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module hibernate.commons.annotations reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module org.jboss.logging reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module org.jboss.logging reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module org.jboss.logging reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module javassist reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module javassist reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module javassist reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module antlr reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module antlr reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module antlr reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module jboss.transaction.api.1.2.spec reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module jboss.transaction.api.1.2.spec reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module jboss.transaction.api.1.2.spec reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module jandex reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module jandex reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module jandex reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module com.fasterxml.classmate reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module com.fasterxml.classmate reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module com.fasterxml.classmate reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module dom4j reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module dom4j reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module dom4j reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module money.api reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module money.api reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module money.api reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module java.annotation reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module java.annotation reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module java.annotation reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module spring.jcl reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module spring.jcl reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module spring.jcl reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module hibernate.core reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module hibernate.core reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module hibernate.core reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module hibernate.jpa reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
error: module hibernate.jpa reads package javax.transaction from both jboss.transaction.api.1.2.spec and java.transaction
error: module hibernate.jpa reads package javax.annotation from both java.annotation and java.xml.ws.annotation
/Users/saw303/dev/adcubum/gesus/offer-server/domain-base/src/main/java/module-info.java:1: error: module offer.server.domain reads package javax.transaction.xa from both java.sql and jboss.transaction.api.1.2.spec
module offer.server.domain {
^
88 errors
I am aware of the following questions on Stackoverflow
- Hibernate 5.2: java.transaction.xa package conflict in Java 9
- Package conflicts with automatic modules in Java 9
but to be honest these did not fix any my problems and I am not sure whether I understood the Java 9 compiler error messages correctly yet.
Why for example does the compile complain about the automatic module org.mapstruct
?
What is the issue about this automatic module jboss.transaction.api.1.2.spec
. It seems to be the key reason of my issue since the compiler repeats naming that transitive automatic module introduced by my Hibernate dependency.
Does anyone of you guys know how to solve this thing and can give me some directions?
Removing Hibernates 5.2.13 transient dependency jboss.transaction.api.1.2.spec to get further
After removing Hibernates 5.2.13 transient dependency jboss.transaction.api.1.2.spec
in my Gradle build
dependencyManagement {
imports {
mavenBom("org.springframework.boot:spring-boot-dependencies:${springBootVersion}")
}
dependencies {
// ...
dependency('org.hibernate:hibernate-core:5.2.13.Final') {
exclude 'org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec'
}
}
}
I managed to get a step further. But now the compile complains about javax.annotation
module.
error: the unnamed module reads package javax.annotation from both java.xml.ws.annotation and java.annotation
error: module org.mapstruct reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module spring.data.jpa reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module moneta reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module nv.i18n reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module spring.data.commons reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module spring.orm reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module spring.aop reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module spring.jdbc reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module spring.tx reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module spring.beans reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module spring.expression reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module spring.core reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module aspectjrt reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module slf4j.api reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module hibernate.commons.annotations reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module org.jboss.logging reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module javassist reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module antlr reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module jandex reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module com.fasterxml.classmate reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module dom4j reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module money.api reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module java.annotation reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module spring.jcl reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module hibernate.core reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module spring.context reads package javax.annotation from both java.annotation and java.xml.ws.annotation
error: module gesus.mapping.base reads package javax.annotation from both java.xml.ws.annotation and java.annotation
error: module hibernate.jpa reads package javax.annotation from both java.annotation and java.xml.ws.annotation
29 errors
How can I trace the problem to its source? And is it actually possible to use Hibernate 5.2.x within a Java 9 module?