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

使用Ant迁移Java模块时遇org.apache.log4j模块未找到问题求助

解决Ant迁移Java模块时log4j模块找不到的问题

核心问题

你在module-info.java里声明的requires org.apache.log4j;是错误的——log4j 2.x的log4j-api-2.17.2.jar的模块名不是org.apache.log4j,这个是log4j 1.x的标识(而log4j 1.x本身并非模块化jar)。log4j 2.x官方模块化jar的标准模块名是org.apache.logging.log4j。

分步解决

1. 修正module-info.java

将requires语句替换为正确的模块名:

module Core {
    requires java.xml;
    requires org.apache.logging.log4j;
}

2. 调整Ant构建脚本支持模块化编译

Eclipse的.classpath配置仅在IDE内部生效,Ant构建需要显式配置模块路径(--module-path)才能识别模块化jar。在Ant的javac任务中添加模块路径参数,示例配置:

<javac srcdir="src" destdir="bin"
       modulepath="lib/log4j-api-2.17.2.jar" <!-- 多jar用分号(Windows)/冒号(Linux)分隔 -->
       modulesourcepath="src">
</javac>

若存在其他模块化依赖,需将对应jar一并加入modulepath。

3. 确认依赖jar的正确性

如果你的代码基于log4j 1.x API编写,需要引入**log4j-1.2-api-2.17.2.jar**(而非log4j-api.jar)做兼容,该jar同样是模块化的,模块名仍为org.apache.logging.log4j,引入后按上述方式配置即可。

额外说明

Java 8无模块系统,依赖通过classpath即可加载,因此之前无问题;但Java 9+的模块系统要求明确声明模块依赖,且必须与jar实际的模块名匹配(可通过命令jar --describe-module --file lib/log4j-api-2.17.2.jar查看jar的模块名)。

内容的提问来源于stack exchange,提问作者Darragh MacKenna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:01:42