You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JDK 10 Eclipse Maven模块化项目编译报错:找不到log4j.api模块

解决JDK 10模块化Maven项目编译报错:module not found: log4j.api

这个报错的核心原因很清晰:你在module-info.java里引用的模块名称和Log4j API实际的模块名称不匹配。

为什么会报错?

Java模块系统中,requires关键字后面需要跟模块的正式名称,而不是Maven依赖的artifactId。对于Log4j 2.11.0版本的log4j-api,它的正式模块名称是org.apache.logging.log4j,而不是你写的log4j.api——这就是编译失败的直接原因。

具体修复步骤

  1. 修正module-info.java的模块声明
    把你的module-info.java中的requires log4j.api;替换成正确的模块名称:

    module project {
     exports com.mycompany.tbe.myproject;
     requires org.apache.logging.log4j; // 这里是正确的模块名称
    }
    

    如果你在代码中直接使用了Log4j Core的API(比如配置Logger的具体实现),还需要额外添加对Log4j Core模块的依赖声明:

    requires org.apache.logging.log4j.core;
    
  2. 验证Maven依赖与编译配置
    你的pom.xml配置基本没问题,但可以做两个小检查:

    • 确认maven-compiler-plugin的release参数已经设置为10,这会让Maven正确处理JDK 10的模块系统(你的配置里已经加了,这点很好)
    • 执行mvn clean install -U强制更新依赖,确保Log4j的JAR包已经正确下载到本地仓库,避免因依赖缺失导致的模块找不到问题
  3. 关于Maven Jar插件的小提示
    注意你当前的maven-jar-plugin配置中使用了jar-with-dependencies的descriptorRef,这会把所有依赖打包进一个JAR。对于模块化项目,这种"胖JAR"方式可能会破坏模块系统的隔离性,如果你需要保留模块化特性,建议改用模块化的打包方式(比如使用maven-jlink-plugin生成自定义运行时镜像),或者如果不需要模块系统,可以移除module-info.java。

验证修复

修改完成后,重新执行mvn clean package,编译应该就能正常通过了。

内容的提问来源于stack exchange,提问作者Tapas Bose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:42:51