您的位置:首页 > 编程语言

Sonar——代码质量管理利器

2012-10-24 01:06 295 查看
一、Sonar简介

Sonar是一个开源的代码质量管理平台,集成了FindBugs、Checkstyle、PMD、JaCoCo等一系列代码分析、测试工具。Sonar并不是简单地对这些工具进行集成,而是通过对这些结果数据进行处理,从以下7个方面对代码质量进行度量:结构设计、重复、单元测试、复杂度、潜在Bugs、编码规范、注释。



Java是Sonar内建支持的语言。通过丰富的插件,Sonar还可以支持C/C++、C#、PHP、Python、JSP、ABAP、SQL等十多种语言。Sonar可以使用Sonar Runner、Sonar Ant Task、Maven多种构建方式对代码进行分析,同时也提供对Hudson/Jenkins、Bamboo、Continuum等持续集成工具的支持。同时,Sonar也提供对Eclipse等IDE的支持,通过Sonar插件联机查看结果。此外,Sonar还具有代码评审的功能。



Sonar主界面



Sonar代码质量分析结果

二、使用Sonar进行代码质量管理

1、分析Maven工程

首先对Maven的配置文件settings.xml添加如下配置:

<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<sonar.jdbc.url>          jdbc:mysql://10.19.250.30:3306/sonar?useUnicode=true&characterEncoding=utf8
</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.19.250.30</sonar.host.url>
</properties>
</profile>


然后执行以下命令:mvn clean install sonar:sonar。
Maven 插件会自动把所需数据(如单元测试结果、静态检测结果等)上传到 Sonar 服务器上,之后由Sonar会对这些数据进行分析和处理,并以各种方式展示结果,从而使我们方便地对代码质量进行管理。

2、分析非Maven工程

对于简单的非Maven工程,可以编写Ant脚本定义Sonar target进行分析,build.xml如下:

...
<!—定义Sonar全局属性 -->
<property name="sonar.jdbc.url" value="jdbc:mysql:// 10.19.250.30:3306/sonar?useUnicode=true&characterEncoding=utf8" />
<property name="sonar.jdbc.username" value="sonar" />
<property name="sonar.jdbc.password" value="sonar" />
...

<!—定义Sonar工程属性 -->
<property name="sonar.projectKey" value="com.test.sonar:test" />
<property name="sonar.projectName" value="Simple Java Project analyzed with the Sonar Ant Task" />
<property name="sonar.projectVersion" value="1.0" />
<property name="sonar.language" value="java" />
<property name="sonar.sources" value="src" />
<property name="sonar.binaries" value="build" />
...

<!-- 定义Sonar target -->
<target name="sonar">
<taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
<!—添加sonar-ant-task-*.jar引用 -->
<classpath path="path/to/sonar/ant/task/lib/sonar-ant-task-*.jar" />
</taskdef>

<!—执行Sonar -->
<sonar:sonar />
</target>
...


也可以编写Gradle脚本进行分析,build.gradle如下:

apply plugin: "java"
apply plugin: "sonar"

……
sonar {
server {
url = System.getProperty("sonar.host.url") ?: "http://10.19.250.30/"
}

database {
url = System.getProperty("sonar.jdbc.url") ?: " jdbc:mysql:// 10.19.250.30:3306/sonar?useUnicode=true&characterEncoding=utf8"
driverClassName = System.getProperty("sonar.jdbc.driver") ?: "com.mysql.jdbc.Driver"
username = System.getProperty("sonar.jdbc.username") ?: "sonar"
password = System.getProperty("sonar.jdbc.password") ?: "sonar"
}

……
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: