Ошибка компиляции: модуль не найден: org.apache.logging.log4j - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть простое приложение, написанное на Java 11. mvn clean verify (maven 3.6.0) выполняется с ошибкой:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project parser: Compilation failure
[ERROR] ...src/main/java/module-info.java:[2,32] module not found: org.apache.logging.log4j  

Зависимости:

<log4j.version>2.11.1</log4j.version>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>${log4j.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>${log4j.version}</version>
</dependency>

Module-info.java:

module abc {
    requires org.apache.logging.log4j;
}

Конфигурация Log4j2 по умолчанию и в XML-файле.Использование:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

private static final Logger logger = LogManager.getLogger(Abc.class); 

logger.info("Boom!");

Я перепробовал все связанные вопросы по stackoverflow, но безуспешно.

1 Ответ

0 голосов
/ 15 ноября 2018

Вы должны перейти на maven-compiler-plugin:3.8.0 и , указав выпуск как 11 .

Причиной является описание log4j-api.jar с использованием состояний --release 11то же имя, что и в вашей директиве.

jar --file=.../.m2/repository/org/apache/logging/log4j/log4j-api/2.11.1/log4j-api-2.11.1.jar --describe-module --release 11
releases: 9

org.apache.logging.log4j jar:file://.../.m2/repository/org/apache/logging/log4j/log4j-api/2.11.1/log4j-api-2.11.1.jar/!META-INF/versions/9/module-info.class
exports org.apache.logging.log4j
exports org.apache.logging.log4j.message
exports org.apache.logging.log4j.simple
exports org.apache.logging.log4j.spi
exports org.apache.logging.log4j.status
exports org.apache.logging.log4j.util
requires java.base mandated
uses org.apache.logging.log4j.message.ThreadDumpMessage$ThreadInfoFactory
uses org.apache.logging.log4j.spi.Provider
uses org.apache.logging.log4j.util.PropertySource

, в первую очередь потому, что log4j-api является модульной банкой .

С другой стороны, log4j-core получается как автоматический модуль , который переопределяется в MANIFEST.MF как

org.apache.logging.log4j.core
...