本文将介绍代码质量管理平台 Sonar 的搭建和使用。Sonar 是一个开源平台,用于管理源代码的质量。您将看到 Sonar 从安装到设置的过程,以及如何在项目中使用 Maven 插件方便地进行代码质量管理。
  Sonar 概述
  Sonar 是一个用于代码质量管理的开放平台。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具。
  与持续集成工具(例如 Hudson/Jenkins 等)不同,Sonar 并不是简单地把不同的代码检查工具结果(例如 FindBugs,PMD 等)直接显示在 Web 页面上,而是通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。
  在对其他工具的支持方面,Sonar 不仅提供了对 IDE 的支持,可以在 Eclipse 和 IntelliJ IDEA 这些工具里联机查看结果;同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。
  此外,Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。
  Sonar 的安装
  Sonar 是 Codehaus 上面的一个开源项目,使用的是 LGPL V3 软件许可。我们可以在其官方网站上下载其源代码及安装包。
  其源代码需要使用分布式版本控制软件 Git 进行检出(Check Out),命令行方式如下:
  git clone git://github.com/SonarSource/sonar.git
  本文主要介绍 Sonar 的使用方法,只需要到 Sonar 网站 下载近的发行包即可,本文写作时新的版本为 2.11。
  下载 zip 包后,直接解压到任意目录,由于 Sonar 自带了 Jetty 6 的应用服务器环境,所以不需要额外的安装可以使用,值得一提的是 Sonar 也支持部署在 Apache Tomcat 应用服务器中。
  在 windows 环境中,直接启动 Soanr 的 bin 目录下 windows-x86-64StartSonar.bat 即可。
  然后在浏览器中访问:http://localhost:9000/


  
图 1. Sonar 访问界面

  这样成功安装并启动了 Sonar,但其中没有安装插件,需要用户下载并安装自己所需要的插件。本节以 Quality Index Plugin 为例,介绍如何下载及安装 Sonar 插件。
  首先访问 Sonar 主页中 Dashboard > Sonar > Documentation > Sonar Plugin Library 路径


  
图 2. Sonar 插件的下载

  进入 Quality Index 插件,点击下载路径


  
图 3. Quality Index Plugin 下载

  然后将下载的 sonar-quality-index-plugin-1.1.3.jar 文件放到 sonar-2.11extensionsplugins 路径下。重启 Sonar,该插件在 Sonar 的平台上运行并开始工作。
  数据库设置
  Sonar 默认使用的是 Derby 数据库,但这个数据库一般用于评估版本或者测试用途。商用及对数据库要求较高时,建议使用其他数据库。Sonar 可以支持大多数主流关系型数据库(例如 Microsoft SQL Server, MySQL,Oracle, PostgreSQL 等)
  本文以 MySQL 为例说明如何更改 Sonar 的数据库设置:
  在 MySQL 中创建 sonar 用户
CREATE USER sonar IDENTIFIED BY 'sonar';
GRANT ALL PRIVILEGES ON *.* TO 'sonar'@'localhost'
IDENTIFIED BY 'sonar' WITH GRANT OPTION;
  将 MySQL 的驱动文件(如 mysql-connector-java-5.1.13.jar)拷贝到 sonar-2.11extensionsjdbc-drivermysql 目录
  修改 sonar-2.11confsonar.properties 文件,用 # 注释原来 Derby 的配置项,并打开 MySQL 数据库的配置项:
# Comment the following lines to deactivate the default embedded database.
#sonar.jdbc.url: jdbc:derby://localhost:1527/sonar;create=true
#sonar.jdbc.driverClassName: org.apache.derby.jdbc.ClientDriver
#sonar.jdbc.validationQuery: values(1)
~~~~~~~~~~~~~~~省略部分~~~~~~~~~~~~~~~~~~
#----- MySQL 5.x/6.x
# Comment the embedded database and uncomment the following
#properties to use MySQL. The validation query is optional.
sonar.jdbc.url:
jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8
sonar.jdbc.driverClassName: com.mysql.jdbc.Driver
#sonar.jdbc.validationQuery: select 1
  重启 Sonar。
  使用 Sonar 进行代码质量管理
  为了不涉及代码的版权问题及方便读者试验,本节以开源项目 Mojo 为例,说明如何使用 Sonar 对源代码进行质量管理,在不涉及编译的情况下,本文尽量使用 Sonar 的 Nemo 演示功能。
  首先,需要从 Mojo 首页 上下载源代码(本文使用 TortoiseSVN 工具),如图所示,Mojo 项目包括了许多工程。


  
图 4. Mojo 工程文件夹