使用Saxon运行ANT的XSLT任务时提示XML resolver未找到错误
解决方案
- 检查Resolver依赖配置正确性
- 确认你使用的是Apache XML Commons Resolver 1.2及以上版本,Saxon 10.6对旧版Resolver兼容性不足,会触发识别失败问题
- 确认
${resolver.path}变量指向完整的resolver.jar文件路径,而非存放jar包的上级目录,Windows环境下路径如果包含空格需要用引号包裹变量值 - 确认
${catalog.path}变量指向具体的catalog XML文件,而非存放目录
- 调整Ant类加载优先级
Ant执行任务时默认优先加载ANT_HOME/lib下的依赖包,项目路径下的jar包可能被类加载优先级拦截导致识别失败,可任选以下一种方案解决:
- 将saxon-he-10.6.jar和resolver.jar同时放入
ANT_HOME/lib目录 - 执行ant命令时添加
-lib参数指定依赖存放目录,示例:ant -lib ./depend-lib 你的转换任务名
- 显式指定Saxon的URIResolver实现
修改你的ANT脚本中xslt任务的factory配置,手动声明使用CatalogResolver作为URI解析器,修改后的完整配置如下:
<xslt style="transform.xsl" basedir="${basedir}" destdir="${destdir}" extension=".dita" processor="trax"> <factory name="net.sf.saxon.TransformerFactoryImpl"> <attribute name="http://saxon.sf.net/feature/uriResolverClass" value="org.apache.xml.resolver.tools.CatalogResolver"/> </factory> <classpath> <pathelement path="${resolver.path}"/> <pathelement path="${saxon.path}" /> </classpath> <xmlcatalog> <catalogpath path="${catalog.path}" /> </xmlcatalog> </xslt>
内容的提问来源于stack exchange,提问作者Jamie Lester
相关产品推荐
相关产品推荐

