Sonar代码分析平台由三个部分组成:

a)Sonar服务

b)Sonar客户端

c)保存代码分析数据的数据库

说明:Sonar客户端常用的方式有Sonar-RunnerMaven插件直接跑、Sonar4Eclipse插件+Maven插件,本文介绍后两种方式。

Sonar介绍

Sonar (SonarQube)是一个开源平台,用于管理源代码的质量。Sonar 不只是一个质量数据报告工具,更是代码质量管理平台。支持的语言包括:JavaPHPC#CCobolPL/SQLFlex 等。

Sonar主要特点:

1.代码覆盖:通过单元测试,将显示哪行代码被选中

2.改善代码规则

3.搜索编码规则:按照名字,插件,激活级别和类别进行查询

4.项目搜寻:按照项目名字进行查询

5.对比数据:比较同一张表中的任何测量趋势

Sonar架构图:

001015927.jpg

下载Sonar

Sonar下载地址http://www.sonarqube.org/downloads/

001106183.jpg

安装Sonar

下载完后把压缩包解压到本地

如:D:\Program Files\sonar-3.7.2

汉化:把sonar-l10n-zh-plugin-1.6.jar放到目录D:\ProgramFiles\sonar-3.7.2\extensions\plugins


建立保存项目代码分析数据的数据库:

Sonar目前支持的数据库有Apatch DerbyH2SQLSERVERMySQL5.x MySQL6.xOralce 10g Oralce11g等,默认使用的是Derby。大部分JDBC驱动包已经在Sonar解压包内的D:\Program Files\sonar-3.7.2\extensions\jdbc-driver目录下,自己对应的找相应的数据库驱动,若没有则自行到网上下载。建议使用MySQL,我本机使用的测试数据库是MySQL5.5.17。安装MySQL及配置MySQL的过程这里不给出,如果不懂查请看源文档。

建立sonar数据库及数据库用户并授权:

>mysql –uroot –p

>CREATE DATABASE SONAR default CHARACTER SET UTF8 ;

>grant all on SONAR.* to ‘sonar’@’localhost’ identified by ‘sonar’;

> grant all on SONAR.* to ‘sonar’@’%’identified by ‘sonar’;

说明:如果你打算把MySQLSonar应用部署在同一台服务器上,可以不对sonar数据库授权远程访问。


配置Sonar

修改Sonar配置D:\Program Files\sonar-3.7.2\conf \sonar.properties,修改如下的行

sonar.web.host:10.108.67.11

sonar.web.port:80

sonar.web.context:/sonar


sonar.jdbc.username:sonar

sonar.jdbc.password:sonar


sonar.jdbc.url:jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true


sonar.jdbc.maxActive:20

sonar.jdbc.maxIdle:5

sonar.jdbc.minIdle:2

sonar.jdbc.maxWait:5000

sonar.jdbc.minEvictableIdleTimeMillis:600000

sonar.jdbc.timeBetweenEvictionRunsMillis:30000


sonar.notifications.delay=60

其他行注释掉。

注意:sonar.web.host配置为localhost时,浏览器访问只能localhost的方式访问,不能从IP访问,配置为指定IP时,不能使用localhost的方式访问,这个不知道是不是Sonarbug?


配置maven项目,使其支持Sonar代码分析:

a)在项目根目录下的pom.xml文件中指定编译所采用的版本及编码方式,npsscms都已经指定,所以不需要添加

<build>

<plugins>

<plugin>

<artifactId>maven-compiler-plugin</artifactId>

<configuration>

<source>1.6</source>

<target>1.6</target>

<encoding>UTF-8</encoding>

</configuration>

<version>2.3.2</version>

</plugin>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-surefire-plugin</artifactId>

<version>2.7.1</version>

</plugin>

</plugins>

</build>

b).m2/setting.xml中节点<profiles></profiles>加上数据库连接参数:

<profile>

<id>sonar</id>

<activation>

<activeByDefault>true</activeByDefault>

</activation>

<properties>

<sonar.jdbc.url>jdbc:mysql://localhost:3306/sonar</sonar.jdbc.url>

<sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>

<sonar.jdbc.username>sonar</sonar.jdbc.username>

<sonar.jdbc.password>sonar</sonar.jdbc.password>

<sonar.host.url>http://10.108.67.11:80/sonar</sonar.host.url>

</properties>

</profile>


至此,Sonar安装及配置完毕,可以从D:\Program Files\sonar-3.7.2\bin\windows-x86-64\ StartSonar.bat启动Sonar

在浏览器中访问:http://10.108.67.11:80/sonar查看效果


分析项目代码质量

Cmd控制台进入需要分析的项目根目录,如:E:\Works\csair\src\scms-project ,运行

a)mvn clean install –DskipTests=true

b)mvn sonar:sonar

编译分析完毕之后在浏览器中查看分析结果

000523736.jpg


--华丽的分割线,可以不安装Sonar4 Eclipse插件--

Sonar4 Eclipse插件安装

方法1

EclispeàHelpàInstall New SoftwareàAdd

Name:Sonar4Eclipse

Location: http://dist.sonar-ide.codehaus.org/eclipse

之后按提示下一步下一步步之类的就可以安装完毕

000618825.jpg

方法2

到网站http://dist.sonar-ide.codehaus.org/eclipse/把文件夹features/plugins/下的jar包全部下载到本地,然后放到ecipse的对应目录下


Sonar4Eclipse插件配置:

EclipseàProjectàClean重新编译项目

EclipseàWindow->Preferences->sonar->Serversàadd,添加sonarserver如下

urlhttp://10.108.67.11:80/sonar

usernameadmin

passwordadmin

说明:url必须和sonar配置文件D:\Program Files\sonar-3.7.2\conf \sonar.properties中的参数一致,否则连接失败!测试连接是否连通需要先在D:\ProgramFiles\sonar-3.7.2\bin\XXX里启动sonar服务。


SonarMaven项目的代码分析:

a)对项目子目录右键 -> Configure -> Associate with Sonar...

000720304.jpg

b)选择配置的sonar、点击find on server按钮获得groupidartifactid,点击finish按钮进行分析。(在步骤a后的界面之后的操作)

000803971.jpg

c) eclipse切换到sonarperspective查看结果

000856943.jpg

至此SonarEclispe插件安装完毕,尽情的使用Sonar代码分析平台带来的便利吧。


说明:本文档只是在windows环境下的安装及配置说明文档,由于我们的项目scmsnps的源码都很大,每次用sonar进行分析耗时都比较长,建议保存的分析结果是本地数据库,这样可以保证项目组各成员之间的分析结果相互独立。等时间充裕之后再尝试在Linux平台下建立一个总的Sonar代码分析平台,到时候就可以以时间为坐标的对我们的项目进行质量统一分析管理了。