使用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
相关产品推荐
相关产品推荐

