一文了解sonar的搭建和使用
sonar的简述
Sonar是一个用于代码质量管理的开源平台,用于管理Java源代码的质量。
通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具,比如pmd-cpd、checkstyle、findbugs、Jenkins。
通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。
同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。 此外,Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。
工作原理
SonarQube 并不是简单地将各种质量检测工具的结果(例如 FindBugs,PMD 等)直接展现给客户,而是通过不同的插件算法来对这些结果进行再加工,最终以量化的方式来衡量代码质量,从而方便地对不同规模和种类的工程进行相应的代码质量管理。
SonarQube 在进行代码质量管理时,会从七个纬度来分析项目的质量。
官网地址:https://www.sonarqube.org/
不同版本如何进行升级,可以参考以下链接。
http://docs.sonarqube.org/display/SONAR/Upgrading
http://docs.sonarqube.org/display/SONARQUBE55/Upgrading
jdk1.7最高只支持到5.5
SonarQube的汉化包参考链接:https://github.com/xuhuisheng/sonar-l10n-zh
兼容列表如下:
SonarQube | 9.0 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
sonar-l10n-zh | 9.0 | |||||||||
SonarQube | 8.0 | 8.1 | 8.2 | 8.3 | 8.4 | 8.5 | 8.6 | 8.7 | 8.8 | 8.9 |
sonar-l10n-zh | 8.0 | 8.1 | 8.2 | 8.3 | 8.4 | 8.5 | 8.6 | 8.7 | 8.8 | 8.9 |
SonarQube | 7.0 | 7.1 | 7.2 | 7.3 | 7.4 | 7.5 | 7.6 | 7.7 | 7.8 | 7.9 |
sonar-l10n-zh | 1.20 | 1.21 | 1.22 | 1.23 | 1.24 | 1.25 | 1.26 | 1.27 | 1.28 | 1.29 |
SonarQube | 6.0 | 6.1 | 6.2 | 6.3 | 6.4 | 6.5 | 6.6 | 6.7 | ||
sonar-l10n-zh | 1.12 | 1.13 | 1.14 | 1.15 | 1.16 | 1.17 | 1.18 | 1.19 | ||
SonarQube | 5.4 | 5.5 | 5.6 | |||||||
sonar-l10n-zh | 1.9 | 1.10 | 1.11 | |||||||
SonarQube | 4.0 | 4.1 | ||||||||
sonar-l10n-zh | 1.7 | 1.8 | ||||||||
SonarQube | 3.1 | 3.2 | 3.3 | 3.4 | 3.5 | 3.6 | 3.7 | |||
sonar-l10n-zh | 1.0 | 1.1 | 1.2 | 1.3 | 1.4 | 1.5 | 1.6 |
环境搭建
以MySQL为例。
-
sonar.properties配置
文件目录位置:sonar根目录/conf/sonar.properties
#database sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance sonar.jdbc.username=sonar sonar.jdbc.password=sonar sonar.sorceEncoding:UTF-8 sonar.login:admin sonar.password:adminsonar.jdbc.minIdle=2 sonar.jdbc.maxIdle=5# WEB SERVER sonar.web.port=9000 sonar.search.host=127.0.0.1
-
数据库配置
按照上文配置的数据库名称sonar,在对应的MySQL中创建名字为sonar的数据库。
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'sonar' IDENTIFIED BY'sonar';
允许用户名sonar,密码为sonar的用户从任何主机连接到MySQL服务器的sonar数据库的任何库表
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY'sonar';
grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口令’;
FLUSH PRIVILEGES;
-
启动服务
启动文件位于
sonar根目录/bin
目录下,里面包含了各种不同环境下的启动文件信息。
启动命令:sonar.sh/sonar.bat start/stop/restart
启动成功的标志
2017.04.02 10:15:49 INFO ce[o.s.c.p.PluginInfo] Plugin [l10nzh] defines 'l10nen' as base plugin. This metadata can be removed from manifest of l10n plugins since version 5.2. 2017.04.02 10:15:50 INFO ce[o.s.s.c.q.PurgeCeActivities] Delete the Compute Engine tasks created before Tue Oct 04 10:15:50 CST 2016 2017.04.02 10:15:50 INFO ce[o.s.ce.app.CeServer] Compute Engine is up 2017.04.02 10:15:51 INFO app[o.s.p.m.Monitor] Process[ce] is up
输入http://ip:9000,即可访问sonar主目录
-
启动异常可能的原因:
- 未创建数据库
- jar包冲突
- 有可能存在不同版本号的相同jar包
- 同类型的隐藏文件(如:同一目录下包含
sonar-css-plugin.jar
和._sonar-css-plugin.jar
两个文件jar)
- 缺少对应的数据库驱动jar
界面简介
-
用户名登录
默认账户密码:admin,admin
-
控件配置
-
菜单:问题-简述。
-
菜单:指标-根据条件搜索项目使用
-
菜单:代码规则-不同语言的代码检测规则定义。
-
菜单:质量配置-对不同语言的代码检测规则配置。默认sonar way配置。未做深入详细调研。
-
菜单:质量阈-代码检测指标定义。达到条件时项目模块变红。通过质量阈指标则项目为绿色。
-
菜单:配置-管理员权限可以看到此菜单,包含了最基本的用户,项目,插件的配置等信息。插件下载可以不通过sonar方式进行安装。
-
菜单:其他(项目比较)-可以对多个不同的项目进行各个不同指标的比对查看。
-
用户-我的账号:可以配置邮件接受提醒。
项目访问配置
需要配置maven的settings.xml
文件和对应项目的根pom.xml
文件即可。
主子模块的项目也只需配置根pom.xml
文件即可。
-
settings文件
配置内容:数据库连接地址,sonar访问地址。
<settings><profiles><profile><id>sonar</id><activation><activeByDefault>true</activeByDefault></activation><properties><sonar.jdbc.url>jdbc:mysql://172.30.21.39:3306/sonar?characterEncoding=utf-8</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://172.30.21.39:9000</sonar.host.url></properties></profile></profiles>
</settings>
-
pom.xml配置
<properties> <!--sonar 语言配置--> <sonar.language>java</sonar.language> <sonar.projectName>项目名称</sonar.projectName> </properties> <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-archetype-plugin</artifactId><version>2.4</version></plugin></plugins> </build>
maven项目会自动生成
sonar.projectKey
,所以不需要配置
注意:同一个project不支持多种语言的分析,这个project要么js要么java,就是这样。需要分开run。
使用的基本操作
配合maven的项目使用配置,添加单元测试的命令使用:
- mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent install -Dmaven.test.failure.ignore=true
- mvn sonar:sonar(此命令可以单独使用,仅检测代码问题,不创建覆盖率报告)
问题查看
- 单元测试覆盖率查看(有问题的单元测试,类中的覆盖率展示)
- 代码问题查看(bug,坏味道等)
- 代码问题的解决方式(忽略,指定解决人,自定义该问题的等级)
- 查看历史检测记录,配置——项目——后台任务,可以查看所有的项目检测历史记录。
用户管理部分配置
允许自行进行注册账户