SonarQube无法分析UTF-16编码的XML/XSD文件求助
这个问题我之前碰到过类似的情况,核心原因是你在用的sonar-xml-plugin 1.4.3.1027版本对UTF-16编码文件的换行符解析存在bug——它会把UTF-16的双字节换行符当成普通字符处理,导致整个文件被误判为只有1行,从而抛出"Line X is out of range"的错误。下面给你几个可行的解决方案:
方案一:升级SonarQube及插件(最彻底的解决方式)
你的SonarQube 5.6.7是2017年的老版本,后续的LTS版本(比如7.9.x、8.9.x)已经修复了大量编码相关的问题,对应的sonar-xml-plugin也更新了UTF-16的解析逻辑。升级前记得做好数据库和配置文件的备份,先在测试环境验证项目兼容性,升级完成后重新扫描应该就能解决这个问题。方案二:临时转换文件编码(应急处理)
如果暂时没法升级环境,可以把UTF-16编码的.xml和.xsd文件转换成UTF-8编码(推荐无BOM的UTF-8,兼容性更好)。转换后检查文件内容是否正常,然后将配置改为sonar.sourceEncoding=UTF-8(或者不指定,SonarQube默认编码就是UTF-8)重新扫描,插件就能正确识别换行符了。方案三:调整扫描配置尝试修复
先确认你的sonar.sourceEncoding=UTF-16配置已经正确加载,可以在扫描日志里搜索这个参数看是否生效。另外,尝试在sonar-scanner的启动命令中添加JVM编码参数:sonar-scanner -Dfile.encoding=UTF-16 -Dsonar.projectKey=my:project ...不过这个方法不一定能修复插件本身的bug,但可以排除系统编码干扰的可能性。
方案四:排除问题文件(临时规避)
如果以上方法都不适用,可以先在sonar-project.properties里配置排除规则,跳过这些有问题的文件:sonar.exclusions=**/office.xsd,**/*.xml这样能保证整个扫描流程不被中断,等后续升级环境后再重新扫描这些文件。
内容的提问来源于stack exchange,提问作者Nicomedes E.




