SonarQube的findbugs扩展

时间:2024-05-31 18:44:05

以前公司扫代码用eclipse findbugs插件,还扩展了8个自定义规则。最近有个需求,就是要把eclipse的findbugs插件中自扩展规则集成到sonar中。

安装sonarqube7.7后,在应用市场再安装完findbugs

SonarQube的findbugs扩展

一开始想到sonar自定义规则,这个比较简单,但是好像不满足需求。需求是要集成到sonar的findbugs插件中去。苦思冥想,发现了是不是可以自己改改 sonar-findbugs-plugin-3.11.0.jar,以达到效果。这个JAR在sonar安装完findbugs后可以在sonarqube-7.7/extensions/plugins拿到。拿到这个JAR后,第一感觉就是反编译下:

SonarQube的findbugs扩展
查看META-INF/lib下,笔者也是一开始找了半天,没发现findbugs的踪迹,但是发现了spotbugs-3.1.12.jar,这是个啥呢?百度了一下,进入官网:https://spotbugs.github.io/,首页有一段介绍:

SonarQube的findbugs扩展

意思很明了,spotbugs继承了findbugs,并且sonar-findbugs-plugin-3.11.0也早已把findbugs升级为spotbugs了,可以在

https://docs.sonarqube.org/display/sonarqube45/findbugs+plugin中查看升级日志。

咱们继续分析,目前想到2种办法。

spotbugs源码下载:https://github.com/spotbugs/spotbugs/tree/release-3.1

sonar-findbugs-plugin源码下载:https://github.com/spotbugs/sonar-findbugs/tree/release-3.9.4

第1种:那是不是可以把sonar-findbugs-plugin-3.11.0.jar依赖的spotbugs-3.1.12.jar源码改下,把自定义规则加进去。然后再重新打包,放进sonar-findbugs-plugin-3.11.0.jar中,再上传到sonarqube-7.7/extensions/plugins中,再重启sonar.此方法笔者就不试了。应该是没有问题的。

spotbugs官网发现说是可以扩展,但是笔者尝试将fb-contrib.jar放入指定目录中

SonarQube的findbugs扩展

然后重新打包,发现放入fb-contrib.jar和不放打出来的jar,体积一样。

SonarQube的findbugs扩展

说明没打进去。目前采用的办法就是直接在源码中加,eclipse插件也是这么做的。

第2种:查看sonar-findbugs-plugin-3.11.0.jar源码,发现了

SonarQube的findbugs扩展

这个不就是对应sonar里面的规则吗?

SonarQube的findbugs扩展

个人猜测,是不是在运行时,fb-contrib.jar会被使用,sonar-findbugs-plugin源码中搜索fb-contrib.jar

SonarQube的findbugs扩展

那咱们就效仿它,下载fb-contrib.jar源码,然后把里面无用代码删除。把咱们的自定义规则放进去,再打包。

未完待续。。。