如何修复DITA Open Toolkit运行时出现的URI Resolver错误?
DITA-OT Saxon URIResolver 报错修复方案
根因
报错核心为Saxon依赖版本冲突:JVM启动DITA-OT时优先加载了系统全局ClassPath下的不兼容Saxon版本,而非DITA-OT自带的匹配版本。不兼容版本的Saxon中不存在net.sf.saxon.Configuration.setURIResolver(javax.xml.transform.URIResolver)方法,因此抛出NoSuchMethodError。
oXygen内置DITA-OT可正常运行,是因为oXygen做了ClassPath隔离,启动时不读取系统全局依赖配置,仅加载自身目录下的匹配版本依赖,不会触发冲突。
修复步骤
按以下优先级操作即可解决问题:
- 清理全局ClassPath中的Saxon引用
- 打开Windows系统环境变量配置面板,检查当前用户变量和系统变量中的
CLASSPATH条目,删除所有包含saxon字样的jar包路径(常见为其他XML处理工具、老旧Java开发工具手动添加的Saxon-HE/Saxon-PE/Saxon-B包路径) - 检查当前使用的JDK安装目录:JDK8及更早版本查看
jre/lib/ext目录,高版本JDK查看lib目录,删除手动放入的所有Saxon相关jar包 - 关闭现有命令行窗口,重新打开新窗口执行
echo %CLASSPATH%确认输出内容中无Saxon相关路径,再进入DITA-OT安装目录执行dita --version,正常输出版本号即修复完成
- 打开Windows系统环境变量配置面板,检查当前用户变量和系统变量中的
- 若不想修改全局环境配置,可修改DITA-OT启动脚本调整ClassPath加载优先级
- 打开DITA-OT安装目录下的
bin/dita.bat脚本 - 找到脚本中拼接ClassPath的代码段,将DITA-OT自带
lib目录的路径放在ClassPath变量的最前端,保证JVM优先加载DITA-OT自带依赖,不会被全局路径的同包名类覆盖 - 保存脚本后重新执行命令即可
- 打开DITA-OT安装目录下的
- Ant构建场景规避冲突
- 不要使用系统全局安装的Ant执行DITA构建,全局Ant会默认加载系统ClassPath下的依赖,极易触发版本冲突
- 直接调用DITA-OT安装目录下
bin/ant.bat脚本执行构建任务,该脚本默认仅加载DITA-OT自身的依赖包,不会读取全局ClassPath配置
验证
修复完成后先执行dita install测试,无Saxon相关报错后,再运行HTML5、XHTML plus CSS示例构建任务即可正常执行。
内容的提问来源于stack exchange,提问作者Jason Coleman
相关产品推荐
相关产品推荐

