The java 9 module reads package X from A and B

I am trying to use spring boot with java 9 and gradle. I cannot run my simple code, I get the following error: -

Information:java: Errors occurred while compiling module 'Java9Gradle_main' Information:javac 9-ea was used to compile java sources Information:6/9/2017 10:40 PM - Compilation completed with 65 errors and 0 warnings in 15s 200ms Error:java: module reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module spring.boot.starter.web reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module spring.boot.starter.web reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module spring.boot.autoconfigure reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module spring.boot.autoconfigure reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module spring.boot.starter.logging reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module spring.boot.starter.logging reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module spring.core reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module spring.core reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module snakeyaml reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module snakeyaml reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module spring.boot.starter.tomcat reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module spring.boot.starter.tomcat reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module hibernate.validator reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module hibernate.validator reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module jackson.databind reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module jackson.databind reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module spring.web reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module spring.web reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module spring.webmvc reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module spring.webmvc reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module spring.context reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module spring.context reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module logback.classic reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module logback.classic reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module jcl.over.slf4j reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module jcl.over.slf4j reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module jul.to.slf4j reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module jul.to.slf4j reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module log4j.over.slf4j reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module log4j.over.slf4j reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module commons.logging reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module commons.logging reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module tomcat.embed.core reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module tomcat.embed.core reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module tomcat.embed.el reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module tomcat.embed.el reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module tomcat.embed.websocket reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module tomcat.embed.websocket reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module validation.api reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module validation.api reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module jboss.logging reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module jboss.logging reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module classmate reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module classmate reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module jackson.annotations reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module jackson.annotations reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module jackson.core reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module jackson.core reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module spring.aop reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module spring.aop reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module spring.beans reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module spring.beans reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module spring.expression reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module spring.expression reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module logback.core reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module logback.core reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module slf4j.api reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module slf4j.api reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module spring.boot.starter reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module spring.boot.starter reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging Error:java: module spring.boot reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging Error:java: module spring.boot reads package org.apache.commons.logging.impl from both jcl.over.slf4j and commons.logging D:\project\Java9Gradle\src\main\java\module-info.java Error:(1, 1) java: module Java9Gradle.main reads package org.apache.commons.logging from both jcl.over.slf4j and commons.logging 

My dependency file and module-info.java file are very simple.

 module Java9Gradle.main { requires spring.boot; } group 'Java9Gradle' version '1.0-SNAPSHOT' apply plugin: 'java' sourceCompatibility = 1.9 repositories { mavenCentral() } dependencies { // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter compile group: 'org.springframework.boot', name: 'spring-boot-starter', version: '1.5.3.RELEASE' // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '1.5.3.RELEASE' testCompile group: 'junit', name: 'junit', version: '4.12' } 

Can anybody help?

Thanks,

Amar

+7
spring spring-boot java-9 gradle java-module
source share
2 answers

The exception of the transitive dependency made it work and configure module-info.java too !!!

 compile("org.springframework.boot:spring-boot-starter:1.5.3.RELEASE") { exclude group: 'commons-logging', module: 'commons-logging' } compile("org.springframework.boot:spring-boot-starter-web:1.5.3.RELEASE"){ exclude group: 'commons-logging', module: 'commons-logging' } 
+4
source share

According to Jigsaw specs

Non-interference - the Java compiler, the virtual machine and the runtime system must ensure that modules containing packages of the same name do not interfere with each other. If two different modules contain packages with the same name, from the point of view of each module, all types and members of this package are defined only by this module. The code in this package in one module must not have access to package-private types or members in this package in another module.

This is called shared packages in @Andy's answer here . Thus, the solution is to disable these packages and make sure that the packages included in your jcl.over.slf4j and commons.logging modules are only accessible through one module.


You can analyze both spring-boot-starter:1.5.3.RELEASE and spring-boot-starter-web:1.5.3.RELEASE to make sure that one of the two modules is included in your project.

+4
source share

All Articles