Spring Boot 2升级后sonar-maven-plugin代码分析失败求助
根据你描述的场景,Spring Boot从1.5.11升级到2.0.1后Sonar分析失败,核心原因大概率是你使用的sonar-maven-plugin 3.4.0.905版本过低,和Spring Boot 2.x依赖的Maven生态组件不兼容。Spring Boot 2.x对Maven版本、依赖组件(比如Guava、SLF4J等)都做了版本升级,老版本的Sonar插件无法适配这些变化。
下面是具体的解决方案,按优先级尝试:
1. 升级Sonar Maven插件到兼容版本
直接把插件版本升级到至少3.6.x以上的稳定版,推荐使用3.7.0.1746或者更高版本(这个版本已经适配了Spring Boot 2.x的环境)。
方式一:在Jenkins命令中指定新版本
修改你的Sonar分析命令为:
mvn -e -f ${CONTEXT_PATH}/pom.xml org.sonarsource.scanner.maven:sonar-maven-plugin:3.7.0.1746:sonar
方式二:在pom.xml中配置插件版本
如果希望项目统一管理插件版本,可以在项目的pom.xml的<build><plugins>节点添加:
<plugin> <groupId>org.sonarsource.scanner.maven</groupId> <artifactId>sonar-maven-plugin</artifactId> <version>3.7.0.1746</version> </plugin>
2. 确保Maven版本符合Spring Boot 2.x要求
Spring Boot 2.0.x要求使用Maven 3.5.0及以上版本,检查Jenkins中配置的Maven环境是否满足。如果还是用老版本的Maven(比如3.3.x),也会导致各种兼容性问题。
3. 检查SonarQube服务器版本兼容性
如果你的SonarQube服务器版本低于6.7,它可能无法支持Spring Boot 2.x的代码语法和特性分析。建议升级SonarQube到7.9 LTS版本(长期支持版),确保和新的扫描插件匹配。
4. 优化Jenkins流水线命令顺序
有时候残留的旧编译文件会干扰分析,建议先执行clean再install,然后跑Sonar分析:
mvn -e -f ${CONTEXT_PATH}/pom.xml clean install mvn -e -f ${CONTEXT_PATH}/pom.xml org.sonarsource.scanner.maven:sonar-maven-plugin:3.7.0.1746:sonar
5. 排查依赖冲突
如果升级插件后还是报错,可以运行mvn dependency:tree查看是否有依赖冲突,比如Guava、Jackson这类Sonar插件和Spring Boot都用到的组件。如果发现冲突,可以在Sonar插件中排除冲突的依赖:
<plugin> <groupId>org.sonarsource.scanner.maven</groupId> <artifactId>sonar-maven-plugin</artifactId> <version>3.7.0.1746</version> <dependencies> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>25.1-jre</version> <!-- 匹配Spring Boot 2.0.1依赖的版本 --> </dependency> </dependencies> </plugin>
按照上面的步骤操作,基本就能解决升级后的Sonar分析失败问题。
内容的提问来源于stack exchange,提问作者DaTa

