java - 编译失败 : module not found: org. apache.logging.log4j

标签 java maven log4j2 java-module java-11

我有一个用 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>

模块信息.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 上尝试了所有相关问题,但没有成功。

最佳答案

您应升级到 maven-compiler-plugin:3.8.0将版本指定为 11

原因是,在使用 --release 11 描述 log4j-api.jar 时声明了与指令中相同的名称。

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 是一个模块化 jar

另一方面,log4j-core 派生为一个自动模块,它仍然在其 MANIFEST.MF 中被覆盖为

org.apache.logging.log4j.core

关于java - 编译失败 : module not found: org. apache.logging.log4j,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53326716/

相关文章:

java - log4j2 和 ch.qos.logback.core.PropertyDefinerBase

java - 每个 'container' 类一个 DAO 还是每个表一个 DAO?

java - Spring AOP 并获取方法的结果

java - 如何将 Angular 6 项目和 Spring Boot 项目部署为单个部署单元

java - 如何配置tomcat每次都重新部署war?

java - log4j2 扩展 Logger 类

java - 如何自定义 log4j2 RollingFileAppender?

java - 带有 Java GUI Builder 的 GUI,用于上传图像并动态显示到面板(在 GUI 内)

java - Tomcat 8 getOpenSessions() 没有返回端点的所有 session ?

java - Gradle 搜索 Ivy 服务但未定义 Ivy 配置/ repo