1.SonarQube是什么?
Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测。
2.SonarQube能带来什么?
1.糟糕的复杂度分布 文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员难以理解它们, 文件、类、方法 等,如果复杂度过高将难以改变,这会使得开发人员难以理解它们。
2.重复 显然程序中包含大量复制粘贴的代码是质量低下的,sonar可以展示源码中重复严重的地方
3.缺乏单元测试 sonar可以很方便地统计并展示单元测试覆盖率
4.没有代码标准 sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写
5.没有足够的或者过多的注释 没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷
6.潜在的bug sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检测出潜在的bug
7.糟糕的设计(原文Spaghetti Design,意大利面式设计) 通过sonar可以找出循环,展示包与包、类与类之间的相互依赖关系可以检测自定义的架构规则通过sonar可以管理第三方的jar包可以利用LCOM4检测单个任务规则的应用情况检测耦合
通过sonar可以有效检测以上在程序开发过程中的七大问题
3.安装
预置条件 1.已安装JAVA环境(JDK8以上) 2.安装sonarqube-6.6 3.安装sonar-runner-dist-2.4 4.已安装有MySQL数据库并执行以下sql语句(可以使用Navicat Premium) mysql> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci; mysql> CREATE USER 'sonar' IDENTIFIED BY 'sonar'; mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar'; mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar'; mysql> FLUSH PRIVILEGES;
直接运行SonarQube目录下面的bin文件夹下对应自己的系统运行StartSonar.bat,例如我的是:D:\xxx\tools\sonarqube-6.6\sonarqube-6.6\bin\windows-x86-64
记住StartSonar.bat脚本运行的过程中不要去随意关闭,下面会说到,然后在浏览器中打开http://localhost:9000/
为什么是localhost:9000呢?接下来我们来配置D:\xxx\tools\sonarqube-6.6\sonarqube-6.6\conf\sonar.properties
配置中的sonar.web.port=9000,对应的就是默认端口,本地服务无需修改,以上的配置修改可以将sonar与本地数据库连接上了,重启服务,观察Navicate Premium中sonar数据库中的表也发生了变化,添加了许多表,这里就不贴出来了。注意很关键的点:如何重启服务呢?开始不知道直接点X将服务窗口关闭,然后重新启动后发现,老是有一个jar包被占用,据说需要将java.exe进程杀死,很粗暴,没试过,后来还是重启电脑了;这边说下,在服务窗口中直接使用Ctrl+c就可以关闭服务了。
下面来配置sonar-runner,打开D:\xxx\tools\sonar-runner-dist-2.4\sonar-runner-2.4\conf\sonar-runner.properties
插入下-----好像忘了说环境变量的配置,太简单这里就不说了,cmd打开并更换目录到D:\zlq\tools\sonar-runner-dist-2.4\sonar-runner-2.4\bin\,运行sonar-runner -v 如果打印出版本说明成功了。
4.sonar-runner + project + sonarqube
在项目中创建sonar-project.properties配置
这样配置在运行sonar-runner后会抛出异常,需要加入sonar.java.binaries配置,貌似跟版本有关吧,binaries就是java工程生成的class文件,例如: sonar.sources=D://workspace/trunk/DeHongFinance/src sonar.java.binaries=D://workspace/trunk/DeHongFinance/build/intermediates/classes 这边我是写死了java文件和class文件的绝对路径
准备工作都好了,现在就运行sonar-runner,开始分析java代码吧。如果一切顺利的话,你会看到:
但是啊!哪有那么容易哦。
下面就讲讲使用过程中遇到的问题吧:
问题一、JDK版本不够哈
怎么解决?就是在环境变量中,javajdk要配到8
问题二、sonar.java.binaries class文件路径没加上会出现Please provide compiled classes of your project with sonar.java.binaries,这个就比较简单了,已经给提示了。
问题三、web问题
这个问题,可以在D:\xxx\tools\sonarqube-6.6\sonarqube-6.6\logs\web.log中查看,Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (4948759 > 4194304). You can change this value on the server by setting the max_allowed_packet' variable,说明数据库需要更多的空间,执行set global max_allowed_packet = 100*1024*1024即可。
4.最后看下结果
分析成功后,log会给出提示: 13:17:22.448 INFO - ANALYSIS SUCCESSFUL, you can browse http://localhost:9000/dashboard/index/my:project,访问这个地址即可。