SonarQube 5.6.5分析报错:无法为Java类创建符号表
搞定SonarQube扫描的Jar包报错问题
先给你拆解下这个报错:你看到的java.lang.IllegalArgumentException出现在ASM的ClassReader初始化环节,ASM是SonarJava插件用来读取类文件字节码的核心工具。结合你说的「没写任何源码、只引入Sonar插件、多数Jar报错但superpom正常」的场景,绝对不是你的源码问题,问题根源在SonarQube插件和项目依赖Jar的兼容性上,具体原因和解决办法如下:
为啥会出这问题?
- Java版本不匹配:SonarQube 5.6.5搭配的Java插件是4.15.0,它依赖的ASM库仅支持到Java 8的字节码。如果你的项目依赖了用Java 9及以上版本编译的Jar包,ASM无法解析高版本字节码,直接抛出这个参数异常。
- 依赖Jar损坏:偶尔会碰到本地Maven仓库里的Jar包下载不完整或损坏,导致ASM读不出有效的类字节码内容。
- 扫描范围配置错误:如果你的Sonar配置不小心把依赖Jar也纳入了扫描范围(默认应该只扫描项目源码),也可能触发这类解析错误。
怎么解决?
按优先级试试下面的方案:
检查依赖的Java编译版本
- 拿报错的
RAMPUtils.java对应的Jar包举例,用命令查看它的编译版本:javap -v -cp /Users/dagrawa/EInkReader/apps/ramp/xxx.jar com.amazon.ebook.ramp.utils.RAMPUtils - 输出里找
major version字段,要是数值大于52(对应Java 8),那就是高版本Jar的问题。要么把依赖降级到Java 8兼容的版本,要么升级SonarQube到支持高版本Java的版本(比如SonarQube 7.9+支持Java 11)。
- 拿报错的
清理并重新下载依赖
- 先清理本地仓库的旧依赖,重新拉取完整的包:
mvn clean install -U - 再运行一次
mvn sonar:sonar,说不定就能解决问题。
- 先清理本地仓库的旧依赖,重新拉取完整的包:
限定Sonar只扫描项目源码
- 在
pom.xml中添加Sonar插件配置,明确扫描范围并排除所有Jar包:<build> <plugins> <plugin> <groupId>org.sonarsource.scanner.maven</groupId> <artifactId>sonar-maven-plugin</artifactId> <version>3.9.1.2184</version> <!-- 适配SonarQube 5.6.5的版本 --> <configuration> <sonar.sources>src/main/java</sonar.sources> <sonar.exclusions>**/*.jar</sonar.exclusions> </configuration> </plugin> </plugins> </build>
- 在
排查ASM依赖冲突
- 检查项目中是否有其他依赖引入了更高版本的ASM,导致Sonar插件加载了错误的ASM版本:
mvn dependency:tree | grep asm - 如果存在冲突,在Sonar插件中排除这些冲突的ASM依赖:
<plugin> <groupId>org.sonarsource.scanner.maven</groupId> <artifactId>sonar-maven-plugin</artifactId> <version>3.9.1.2184</version> <dependencies> <dependency> <groupId>org.sonarsource.java</groupId> <artifactId>sonar-java-plugin</artifactId> <version>4.15.0.12310</version> <exclusions> <exclusion> <groupId>org.ow2.asm</groupId> <artifactId>asm</artifactId> </exclusion> <exclusion> <groupId>org.ow2.asm</groupId> <artifactId>asm-tree</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </plugin>
- 检查项目中是否有其他依赖引入了更高版本的ASM,导致Sonar插件加载了错误的ASM版本:
总的来说,最常见的原因是高版本Java编译的依赖Jar与旧版SonarJava插件不兼容,优先从这个方向排查准没错。
内容的提问来源于stack exchange,提问作者Divyanshu
相关产品推荐
相关产品推荐

