У меня проблема с заменой регистрации общего ресурса на jcl-over-slf4j в модульной системе Java 9.Я исключил ведение журнала общего пользования из maven и добавил jcl-over-slf4j в качестве зависимости:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-configuration2</artifactId>
<version>2.3</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.8.0-beta2</version>
</dependency>
Как я вижу, commons-configuration2 - это модуль с автоматическим именем, а jcl-over-slf4jмодуль приложения.
Если я оставляю модуль jcl-over-slf4j из module-info.java, я получаю эту ошибку NoClassDefFoundError, jcl-over-slf4j находится на пути к классам, так как библиотека не можетувидеть его:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/Log
at org.apache.commons.configuration2@2.3/org.apache.commons.configuration2.io.FileSystem.<clinit>(FileSystem.java:37)
Если я добавлю jcl-over-slf4j в module-info.java, я получу эту ошибку недопустимого доступа:
requires transitive org.apache.commons.logging;
Какой org.apacheМодуль .commons.logging на самом деле является модулем jcl-over-slf4j.
xception in thread "main" java.lang.IllegalAccessError: class org.apache.commons.configuration2.io.ConfigurationLogger (in module org.apache.commons.configuration2) cannot access class org.apache.commons.logging.impl.NoOpLog (in module org.apache.commons.logging) because module org.apache.commons.logging does not export org.apache.commons.logging.impl to module org.apache.commons.configuration2
at org.apache.commons.configuration2@2.3/org.apache.commons.configuration2.io.ConfigurationLogger.newDummyLogger(ConfigurationLogger.java:115)
Что я не понимаю, у commons-configuration2 должен быть доступ к нему, и я застрял здесь.Любая помощь приветствуется.