一、sonarqube简介
Sonar是一个用于代码质量管理的开源平台,用于管理Java源代码的质量。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具,比如pmd-cpd、checkstyle、findbugs、Jenkins。
通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地
在持续集成中使用 Sonar。 此外,Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。
二、代码质量检测规划
随着代码量的增多,服务模块的拆分,代码越来越难进行管理,质量与效率的矛盾慢慢凸显出来,而人为的管理代码质量,耗时耗力。因此实现自动化工具检测势在必行,
平台规划使用云端和本地结合的方式实现代码质量的管控。云端Git + Jenkins + Sonar执行自动代码质量分析,研发人员在Git提交代码后,会自动触发Jenkins构建项目,构建
项目前,自动触发Sonar检测代码质量,并将结果展示在页面。本地研发人员提交代码前,先用编码规范进行代码检测,检测没有异常,才能提交代码。
Sonar本身提供了大量的代码检测规则,但是很多规则并不影响代码的质量和效率。目前业界比较好的java代码规范是阿里发布的《阿里巴巴java开发手册》,而二者也可以很方便的集成在一起。
本地代码检测规则和云端Sonar的配置的规则应保持一致,Sonar提供了IDE开发工具插件sonarLint,可以将sonarQube服务上配置的规则同步到开发工具上。但是目前Sonar并不支持自定义规则的同步,所以需要先在开发工具装安装阿里的p3c编码规范插件,然后从中选择平台适用的规范。目前这是折中方案,后续将继续研究如何将第三方的规则从sonarQube上同步到本地IDE中,使自定义规则的同步更方便。
推荐使用Idea进行研发,idea可以自定义配置需要的代码检查规则。
一、pmd插件整合阿里开发规则
sonar-pmd是sonar官方的支持pmd的插件,但是还不支持p3c,需要在pmd插件源码中添加p3c支持(p3c是阿里在pmd基础上根据阿里开发手册实现了其中的49开发规则)。
源码下载地址:https://github.com/mrprince/sonar-p3c-pmd
此源码工程已经添加了P3C支持,直接mvn package打包即可。
打好jar包后拷贝到sonar的plugins目录下:
|
sonarQube_Home/extensions/plugins
|
重启sonarQube,进入sonarQube后,选择“代码规则”菜单,在页面中,选择“Java”,搜索框中搜索“p3c”,右侧列表能显示规则则导入成功
注意:注意SonarQube版本匹配问题,当前SonarQube 7.2社区版
二、配置阿里开发规则
选择“质量配置”菜单,点击“创建”按钮
在弹出的页面出输入配置名称并选择编程语言,创建配置
进入配置页面后,点击“更多激活规则”,可以进入规则选择页面
语言选择“Java”,并在搜索框中输入“p3c”,查找出之前导入的阿里编码规则
点击需要添加的规则后的“活动”按钮,可以将此条规则激活,加入创建的质量配置中
点击“活动”按钮的弹出框中可以选择此条规则的适用严重程度
三、设置Java和项目的质量配置
选择“质量配置”菜单,在页面中选择刚才创建的质量配置,点击配置按钮选择“设为默认”,可以将
该质量配置设置为java默认配置,提交的java代码会自动被质量配置中的规则进行质量检查
如果不设置未默认,也可以点击刚才创建的质量配置,在跳出的页面中选择“修改项目”,来添加
适用该质量配置的项目
IDEA添加阿里编码规范
打开IDEA的Settings
选择Plugins,右侧选择Alibaba Java Coding Guidelines,并install
重启IDEA后,可以看到Tools下已有阿里编码规约
二、IDEA选择适用的阿里编码规范
打开IDEA的Settings,选择Inspections,在右侧的界面中Copy一个Profile并改名,与系统的Profile进行区别。
Leavel 是Project Leavel,用橡皮檫清空原来的选择的规则后选择Ali-Check下的规则,Ali-Check分类下即是
阿里巴巴的编码规范。
配置好Ali-Check后,可以选择将Profile导出,其他同事可以直接导入使用
三、IDEA使用配置的编码规范进行代码检测
选择Analyze下的Inspect Code菜单
在弹出的界面中选择配置的Ali-Check进行检测
检测结果会显示在IDEA的下方
也可以在想要检查的类上右击,Analyze→Inspect Code,进行当前类的检测