使用PDFBox 3.0.0 alpha3转TXT为PDF时遇运行时异常求助
解决方案:TXT转PDF时的日志初始化错误与模块解析冲突处理
一、核心问题根源
- ExceptionInInitializerError(日志未初始化):Apache PDF处理组件(如PDFBox)依赖commons-logging实现日志输出,项目缺少该依赖导致类初始化失败。
- ResolutionException(模块解析冲突):手动添加commons-logging-1.2.jar后,与JDK9+模块化系统冲突——commons-logging属于未模块化的Jar,易和JDK内置日志模块或其他依赖模块产生兼容性问题。
二、分步解决
1. 替换依赖,规避模块化冲突
放弃手动添加commons-logging-1.2.jar,改用SLF4J作为日志桥接方案,适配模块化环境:
- Maven/Gradle管理依赖(以Maven为例):
<!-- SLF4J核心API --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>2.0.9</version> </dependency> <!-- 桥接commons-logging到SLF4J,替代原commons-logging依赖 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>2.0.9</version> </dependency> <!-- 可选:添加简单日志实现用于测试 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>2.0.9</version> <scope>test</scope> </dependency> - 手动管理Jar包:下载对应版本的
slf4j-api.jar、jcl-over-slf4j.jar,替换原commons-logging-1.2.jar。
2. 模块化项目额外配置(JDK9+)
若项目为模块化(含module-info.java),需在模块声明中添加依赖:
module your.module.name { requires org.slf4j; requires org.slf4j.jcl.over.slf4j; // 同时添加Apache PDF组件的模块依赖,例如: requires org.apache.pdfbox; }
3. 验证日志初始化
在代码启动阶段添加日志初始化验证,确保日志系统正常加载:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class TxtToPdfConverter { private static final Logger logger = LoggerFactory.getLogger(TxtToPdfConverter.class); public static void main(String[] args) { logger.info("日志系统初始化完成"); // 你的TXT转PDF业务逻辑 } }
4. 排查并清理重复依赖
若仍有冲突,检查项目中是否存在重复日志依赖:
- 用Maven命令查看依赖树,定位重复依赖:
mvn dependency:tree - 排除冲突依赖,例如在PDFBox依赖中移除commons-logging:
<dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.32</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency>
三、替代方案:使用轻量PDF库
若上述配置仍有问题,可尝试无冗余日志依赖的OpenPDF(iText开源分支):
<dependency> <groupId>com.github.librepdf</groupId> <artifactId>openpdf</artifactId> <version>1.3.30</version> </dependency>
内容的提问来源于stack exchange,提问作者Mahdad Zarafshan
相关产品推荐
相关产品推荐

