Sonar是一个开源平台,用于管理Java源代码的质量。从 Sonar 1.6 版本开始,Sonar从一个质量数据报告工具,转变成为现在的代码质量管理平台。
主要特点:
- 代码覆盖:通过单元测试,将会显示哪行代码被选中
- 改善编码规则
- 搜寻编码规则:按照名字,插件,激活级别和类别进行查询
- 项目搜寻:按照项目的名字进行查询
- 对比数据:比较同一张表中的任何测量的趋势
下面将从sonarQube的安装、启动到maven集成,代码检测,一一介绍
1.SonarQube的下载
2.sonar数据库创建
mysql> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
mysql> CREATE USER 'sonar' IDENTIFIED BY 'sonar';
Query OK, 0 rows affected (0.12 sec)
mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.03 sec)
mysql> exit
Bye
3.安装sonar
3.1 将下载的sonar-3.7.zip包解压至Linux某路径如/usr/local
[root@interBus-mysql-02 local]# unzip sonarqube-5.6.6.zip
3.2 编辑sonar的配置文件
[root@interBus-mysql-02 conf]# pwd
/usr/local/sonarqube-5.6.6/conf
[root@interBus-mysql-02 conf]# vim sonar.properties
修改以下内容
###配置数据库用户名和密码(注意这边与创建数据库时的用户名密码对应,别写错了)
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
###配置sonar数据库连接url
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar.web.host=0.0.0.0
# Optional properties
###如果开启了下面的配置,起启动后通过http://ip:port/sonarqube访问
#sonar.web.context=/sonarqube
sonar.web.port=9000
#----- Connection pool settings
sonar.jdbc.maxActive=20
sonar.jdbc.maxIdle=5
sonar.jdbc.minIdle=2
sonar.jdbc.maxWait=5000
sonar.jdbc.minEvictableIdleTimeMillis=600000
sonar.jdbc.timeBetweenEvictionRunsMillis=30000
保存以上配置(注意,要看看默认的 9000 端口是否已被占用) 防火墙中打开 9000 端口:
###修改防火墙配置
[root@interBus-mysql-02 conf]# vim /etc/sysconfig/iptables
###开启9000端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9000 -j ACCEPT
重启防火墙,使端口配置生效
[root@interBus-mysql-02 conf]# service iptables restart
iptables: Applying firewall rules: [ OK ]
3.3 启动 SonarQube Web Server
[root@interBus-mysql-02 bin]# find / -name sonar.sh
/usr/local/sonarqube-5.6.6/bin/linux-x86-64/sonar.sh
/usr/local/sonarqube-5.6.6/bin/macosx-universal-64/sonar.sh
/usr/local/sonarqube-5.6.6/bin/linux-x86-32/sonar.sh
###启动sonarQube服务
[root@interBus-mysql-02 bin]# /usr/local/sonarqube-5.6.6/bin/linux-x86-64/sonar.sh start
Starting SonarQube...
Started SonarQube.
[root@interBus-mysql-02 bin]#
#./sonar.sh start 启动服务
#./sonar.sh stop 停止服务
#./sonar.sh restart 重启服务
4.sonar的访问
sonar首次启动后会在对应的数据库中生成了一系列sonar相关的表
在浏览器中输入http://10.1.10.80:9000就能访问sonar服务的主页
这时候还没有将maven中的代码交给sonar服务进行管理,所以sonar的管控台中暂时没有关于代码检测的相关数据
5.Maven 分析器插件的配置与使用:
http://docs.sonarqube.org/display/SONAR/Installing+and+Configuring+Maven
在 Maven 本地库中的 settings.xml(我这里是 settings_ssm.xml)配置文件加入如下配置
5.1 sonar的maven配置
###找到文件中<profiles></profiles>节点添加如下配置:
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- Example for MySQL-->
<sonar.jdbc.url>
jdbc:mysql://10.1.10.80:3306/sonar?useUnicode=true&characterEncoding=utf8
</sonar.jdbc.url>
<sonar.jdbc.username>sonar</sonar.jdbc.username>
<sonar.jdbc.password>sonar</sonar.jdbc.password>
<!-- Optional URL to server. Default value is http://localhost:9000 -->
<sonar.host.url>
http://10.1.10.80:9000
</sonar.host.url>
</properties>
</profile>
5.2 使用 Maven 分析器进行分析
纯 Maven 命令:
mvn clean install sonar:sonar
MyEclipse 中执行:
clean install sonar:sonar
(如果你是第一次运行此命令,看执行日志你会发现它会先下载 sonar-runner 等插件)
成功执行完分析命令后便可到 Web Server 中查看代码质量分析结果数据。
此时,我的控制台出现了如下错误:
可以使用选项-X打印具体的报错日志进行查看:clean install sonar:sonar -X
出现该问题的原因是版本不兼容的问题,我的环境是java8+maven3.3.9
然后我将sonar的版本换成4.5.4后就不再出现该问题
6 查看代码质量检测报告
再次访问sonar主页,发现sonar已经把我的代码质量分析写到数据库中,并将结果展现到了界面上