0

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

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?

saw303
  • 8,051
  • 7
  • 50
  • 90
  • 2
    Looks like you've got two issues here. The EE modules the run-time image are being resolved - you've ended up with two modules exporting the javax.transaction API for example. Maybe you've added `--add-modules java.se.ee` by mistake? The second issue is that you need v1.3 of the java.transaction module, you are using v1.2 of the JBoss version. JTA 1.3 is new, it drops the javax.transaction.xa package so no overlap with the Java SE `java.sql` module. – Alan Bateman Mar 05 '18 at 07:29
  • Is there a Hibernate version that uses JTA 1.3 yet or do I have to replace it myself in my build? – saw303 Mar 05 '18 at 10:04
  • Sorry I don't know but you are essentially looking for JTA download that does not include the javax.transaction.xa package. Also you need to drop `--add-moduels java.se.ee` too. – Alan Bateman Mar 06 '18 at 07:43
  • I removed the `--add-modules java.se.ee` and excluded the JTA spec of JBoss (as a test). But now I am stuck on package `javax.annotation`. What a mess :( – saw303 Mar 06 '18 at 21:41
  • 1
    It does sound like a mess. I assume something is missing a dependency on the Common Annotations (javax.annotation:javax.annotation-api: in Maven). Someone more familiar with Hibernate might be able to help on that. – Alan Bateman Mar 07 '18 at 06:51
  • To solve first split package promblem, look at this answer: https://stackoverflow.com/a/50724684/2773647 - include manually dependency on `javax.transaction:javax.transaction-api:1.3` which has removed mentioned `javax.transaction.xa` package – cybersoft Jun 06 '18 at 16:03

0 Answers0