将Scala从2.12.20升级到2.13.0时抛出SAXParseException
解决Scala 2.13.0升级时的XML解析错误
问题核心
升级Scala到2.13.0时,sbt的update阶段触发SAXParseException,提示XML实体display未以;结尾。且注释所有业务依赖后错误仍存在,说明问题不在业务依赖本身,而是sbt解析仓库元数据、插件配置或全局设置时遇到格式错误的XML。
排查修复步骤
1. 检查仓库URL的XML转义问题
sbt解析仓库元数据时,若仓库URL包含未转义的&字符(比如带参数的地址https://xxx.com/repo?a=1&display=2),会触发XML解析错误。
- 核对
build.sbt和plugins.sbt中的所有resolvers,将URL中的&替换为& - 临时注释所有自定义仓库,仅保留默认Maven Central,测试
update是否正常,定位问题仓库
2. 排查插件兼容性与版本问题
部分老插件在配合Scala 2.13时,可能出现元数据解析异常:
- 逐个注释
plugins.sbt中的非核心插件(如scalastyle、swagger、flyway等),仅保留Play插件,逐步排查出有问题的插件 - 升级插件到兼容Scala 2.13的版本:
scalastyle-sbt-plugin1.0.0 → 1.5.0+sbt-play-swagger1.2.3 → 2.0.0+(适配Play 2.8.x和Scala 2.13)flyway-sbt7.4.0 → 适配sbt 1.3.x的最新稳定版
3. 清理sbt本地缓存
缓存的元数据可能损坏导致解析错误:
- 执行sbt命令清理:
sbt clean cleanFiles - 手动删除本地缓存目录:
- Linux/macOS:
~/.ivy2/cache、~/.sbt - Windows:
C:\Users\<你的用户名>\.ivy2\cache、C:\Users\<你的用户名>\.sbt
- Linux/macOS:
4. 检查全局sbt配置
全局~/.sbt/1.0/目录下的配置文件可能存在问题仓库,临时重命名该目录,让sbt生成默认配置,测试是否恢复正常。
5. 升级sbt版本
sbt 1.3.13存在较久,可能存在XML解析相关bug,升级到sbt 1.9.x(兼容Scala 2.13和Play 2.8.x的稳定版):
- 修改
project/build.properties中的sbt.version=1.9.6(或最新稳定版)
关键提示
错误中的display实体几乎肯定来自某个仓库URL的未转义参数,重点排查自定义仓库地址的格式是否符合XML规范。
内容的提问来源于stack exchange,提问作者xeob321
相关产品推荐
相关产品推荐

