今年年终翻倍了,可能在大家眼里都不是个事,但是对于我来说确确实实翻倍了。主要原因还是因为主导项目使用了Sonar,提高了开发效率和代码质量为我加了不少分,废话不多说,开搞。
Sonar 为代码的质量管理提供了一个平台,对传统的代码静态检测如 PMD、FindBugs 等工具进行整合,可以说是目前最强大的代码质量管理工具之一。——Sonar 官网介绍
Sonar 大致分为IDEA 插件版本的SonarLint 和带有非常友好功能强大GUI 的SonarQube 代码质量平台,完全能满足我们的需求。并且Sonar 提供了面向gitlab、jekins、maven 的无缝对接支持,是当下最活跃热门的代码质量扫描工具。
SonarQube 是一款开源静态代码质量分析管理工具,SonarQube 版本<8.6的情况下,在默认配置的情况下,缺少对API 接口的访问权限控制,攻击者可利用该漏洞在未授权的情况下,通过访问api/settings/values 接口从而获取到SMTP、SVN、GitLab 凭据,进一步获取源代码数据仓库中的源代码,造成项目源代码泄露。同时还可以对使用默认账号密码的用户进行攻击,系统安装完成后,默认弱口令为admin/admin,攻击者通过输入默认账号密码,同样可以获得敏感配置信息,从而进一步窃取企业源代码。
1、升级版本到8.6以上;
2、漏洞是利用API接口窃取数据,可以将SonarQube 部署在内网环境,并修改默认账号密码和端口加以防范。
最简单的做法就是,IDEA 的plugins 应用市场直接搜索SonarLint 然后安装就可以了。然后直接鼠标右键选择Sonar 扫描文件就可以看到结果了:
此处就发现一个开发者忽略的问题,相同对象重复判空,导致下面逻辑还是可能出现问题
/**
* 判断是否为禁用状态
*/
private XXX a(Long disableStartTime, Long disableEndTime) {
Long currentTime = DateUtil.currentSeconds();
if (null == disableEndTime || null == disableEndTime) {
return XXX.enable;
}
...
}
这种简单粗暴的问题有两个
官网下一个SonarQube 的安装包,这里面有个坑,官网上最新的LTS版本的SonarQube(目前是version-8.9)最低要求的Java版本是JDK11,我们现在普遍还是用的Java8,所以推荐下载7.8版本的。
下载完毕,解压后,进入到/Sonarqube-X.X/bin下面,可以看到有所有通用的平台的启动文件
演示以Windows 平台为例:
执行StartSonar.bat 启动服务,启动日志在/Sonarqube-X.X/logs/Sonar.log 中,然后浏览器前往localhost:9000,成功后页面如下:
点击右上角选择登陆,初始用户名密码都是admin,登录后再右上角用户logo 上选择My Accout -> security 创建token 或者修改密码
在项目根目录下面执行Maven 命令,执行成功后,再回到SonarQube 平台,可以看到结果。
// DSonar.login 后面替换成你自己的token 就行了
mvn clean install Sonar:Sonar -DSonar.host.url=http://localhost:9000 -DSonar.login=d7b53bc44cd108ee40b6691433bf70eb0a507b0b
![在这里插入图片描述](https://img-blog.csdnimg.cn/681077ecea3349bcb5067f034b65e363.png
根据结果可以看出,还是有很多地方存在NPE没有处理,还有重写equals()没有重写hashCode() 等问题,点击会有规则说明解释:
修改优化后,再重新执行一回命令,Bug 为0就OK啦。
根据官方文档,Sonar 可以持续集成与GitLab、Jenkins 联合应用。接入GitLab 每次提交的时候检查有无Bug ,如有,则发送钉钉告警信息。接入项目部署平台,将Bug 检查作为部署前置检查。
Please refer to D:\XXXX\target\surefire-reports for the individual test results.
这是因为测试代码时遇到错误,它会停止编译。只需要在pom.xml 的里添加以下配置,使得测试出错不影响项目的编译。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
</plugins>
</build>
pom 文件夹添加编码格式:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
1、SonarLint 版本和SonarQube 版本要适配,插件下单地址
SonarLint 4.14.1.27745 经验证可以支持SonarQube 7.8
2、没有找到适配的插件可以选择maven 或其他方式扫描分析项目。
安装Node.js 后重新配置连接
在我们这个地方,你必须不停地奔跑,才能留在原地。如果你要抵达另一个地方,必须以双倍于现在的速度奔跑。——【英】刘易斯·卡罗尔《爱丽丝梦游仙境》
想要从众多竞争对手中脱颖而出,就必须付出更多的努力。我们可以通过Sonar ,帮助我们推动Code Review 和代码设计质量的持续监控,从而提高软件项目的总体开发运维效益。Code Review 是提高项目质量的重要途径之一,也是我们提高自己代码能力和沟通能力的有效方式。