以前公司扫代码用eclipse findbugs插件,还扩展了8个自定义规则。最近有个需求,就是要把eclipse的findbugs插件中自扩展规则集成到sonar中。
安装sonarqube7.7后,在应用市场再安装完findbugs
一开始想到sonar自定义规则,这个比较简单,但是好像不满足需求。需求是要集成到sonar的findbugs插件中去。苦思冥想,发现了是不是可以自己改改 sonar-findbugs-plugin-3.11.0.jar,以达到效果。这个JAR在sonar安装完findbugs后可以在sonarqube-7.7/extensions/plugins拿到。拿到这个JAR后,第一感觉就是反编译下:
查看META-INF/lib下,笔者也是一开始找了半天,没发现findbugs的踪迹,但是发现了spotbugs-3.1.12.jar,这是个啥呢?百度了一下,进入官网:https://spotbugs.github.io/,首页有一段介绍:
意思很明了,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放入指定目录中
然后重新打包,发现放入fb-contrib.jar和不放打出来的jar,体积一样。
说明没打进去。目前采用的办法就是直接在源码中加,eclipse插件也是这么做的。
第2种:查看sonar-findbugs-plugin-3.11.0.jar源码,发现了
这个不就是对应sonar里面的规则吗?
个人猜测,是不是在运行时,fb-contrib.jar会被使用,sonar-findbugs-plugin源码中搜索fb-contrib.jar
那咱们就效仿它,下载fb-contrib.jar源码,然后把里面无用代码删除。把咱们的自定义规则放进去,再打包。
未完待续。。。