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相关的表

sonar java扫描 sonar代码检查java_java

在浏览器中输入http://10.1.10.80:9000就能访问sonar服务的主页

sonar java扫描 sonar代码检查java_数据库_02

这时候还没有将maven中的代码交给sonar服务进行管理,所以sonar的管控台中暂时没有关于代码检测的相关数据



5.Maven 分析器插件的配置与使用:

http://docs.sonarqube.org/display/SONAR/Installing+and+Configuring+Maven

在 Maven 本地库中的 settings.xml(我这里是 settings_ssm.xml)配置文件加入如下配置

sonar java扫描 sonar代码检查java_bc_03



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 中查看代码质量分析结果数据。

sonar java扫描 sonar代码检查java_数据库_04

此时,我的控制台出现了如下错误:

sonar java扫描 sonar代码检查java_数据库_05

可以使用选项-X打印具体的报错日志进行查看:clean install sonar:sonar -X

出现该问题的原因是版本不兼容的问题,我的环境是java8+maven3.3.9

然后我将sonar的版本换成4.5.4后就不再出现该问题



6 查看代码质量检测报告

再次访问sonar主页,发现sonar已经把我的代码质量分析写到数据库中,并将结果展现到了界面上

sonar java扫描 sonar代码检查java_数据库_06

sonar java扫描 sonar代码检查java_java_07

sonar java扫描 sonar代码检查java_开发工具_08