sonar的安装以及使用
SonarQube是管理代码质量一个开放平台,可以快速的定位代码中潜在的或者明显的错误,下面将会介绍一下这个工具的安装、配置以及使用。
1. 简介
1. sonar是什么
Sonar是一个用于代码质量管理的开源平台,用于管理代码的质量,通过插件形式可以支持二十几种语言的代码质量检测,通过多个维度的检查了快速定位代码中潜在的或者明显的错误。
2. SonarQube与Sonar
SonarQube是sonar的服务端,相当于一个web服务器中的tomcat,用来发布应用,在线浏览分析等。
2.安装
1.下载sonarqubexxx.zip并且解压即可:
下载地址:http://www.sonarqube.org/downloads/
下载完成后解压后点击StartSonar.bat启动即可,如下:

http访问9000端口出现下面则证明安装成功。 (如果需要修改端口等信息修改sonarqube-6.7.6\conf\sonar.properties即可)

2.配置数据库
1. 在mysql数据库新建一个库的名称为sonar
2. 修改sonar/conf/sonar.properties的db信息:
不用放置驱动包,也不用创建表。
sonar.jdbc.username=root
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
3.重启sonarQube会自动建表。

4.接下来访问9000端口然后进行登录即可。默认创建的用户名和密码都是admin。可以在system选项卡看到系统信息

3.使用
1.下载sonar-scanner:(这个工具是对源码进行扫描,并将结果保存到数据库以便用上面的sonarqube进行分析)
下载地址: https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
2.配置mysql信息
\sonar\sonar-scanner-3.3.0.1492-windows\conf\sonar-scanner.properties文件
#Configure here general information about the environment, such as SonarQube server connection details for example
#No information about specific project should appear here #----- Default SonarQube server
#sonar.host.url=http://localhost:9000 #----- Default source code encoding
#sonar.sourceEncoding=UTF-8 sonar.jdbc.username=root
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
3.配置环境变量 并测试
path中增加如下变量: E:\sonar\sonar-scanner-3.3.0.1492-windows\bin
C:\Users\Administrator>sonar-scanner --version
INFO: Scanner configuration file: E:\sonar\sonar-scanner-3.3.0.1492-windows\bin\..\conf\sonar-scanner.properties
INFO: Project root configuration file: NONE
INFO: SonarQube Scanner 3.3.0.1492
INFO: Java 1.8.0_121 Oracle Corporation (-bit)
INFO: Windows 10.0 amd64
4.打开要进行代码分析的项目根目录,新建sonar-project.properties文件
# must be unique in a given SonarQube instance
sonar.projectKey=my:project
# this is the name displayed in the SonarQube UI
sonar.projectName=springboot-ssm
sonar.projectVersion=1.0 # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# Since SonarQube 4.2, this property is optional if sonar.modules is set.
# If not set, SonarQube starts looking for source code from the directory containing
# the sonar-project.properties file.
sonar.sources=src/main/java
sonar.java.binaries=./target/classes # Encoding of the source code. Default is default system encoding
#sonar.sourceEncoding=UTF-8
解释:projectName是项目名字,sources是源文件所在的目录;sonar.java.binaries是项目编译后的class文件的目录。
5.设置成功后,启动sonarqube服务
6.开始分析:
cmd窗口进入到项目的根路径,执行下面命令即可:
E:\xiangmu\springboot-ssm>sonar-scanner
如下:

7.访问9000端口查看分析结果
项目分析概要图:

查看存在的bug:

8.选择一个bug进行查看(可以看到与git也进行了集成,可以看到编写人与时间以及bug的原因)

此工具还分析出一些异常信息的记录等,如下:

9. 解决下面的bug

代码修改为下面即可:(上面逻辑应该是没有错,只是在多次改变引用的情况下被检测为bug)
@Override
public Token addOrUpdateToken(String username) {
// 1.判断是否有对应的token,如果有的话更新时间,没有的话就创建token并且返回
Token token = findTokenByUsername(username);
// 1.1创建token并返回
if (token == null) {
return generateAndSaveTokenByUserName(username);
} // 1.2根据失效时间更新且返回token
return updateTokenByTokenLoseTime(token);
}
10.解决异常处理的bug

代码修改为:
@Scheduled(fixedRate = 10000)
public void cron() {
try {
Thread.sleep(2000);
System.out.println("spring anno task execute times " + count++);
} catch (InterruptedException e) {
System.err.println("InterruptedException " + e);
Thread.currentThread().interrupt();
}
}
11.程序中故意写一个空指针异常看是否可以检测出来
String string = null;
if(string.equals("xxx")){
System.out.println("xxx");
}
结果:

更多的学习参考官网:
https://docs.sonarqube.org/display/SCAN/Advanced+SonarQube+Scanner+Usages
补充:sonarqube汉化
- 到https://docs.sonarqube.org/display/PLUG/Plugin+Library 网站搜索 chinese pack
 

- 然后点击到对应的git地址https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases下载对应版本的jar包,下载之后放到sonar\sonarqube-6.7.6\extensions\plugins目录下面重启即可,如下:
 
  
- 再次通过9000端口访问发现变为中文版:
 

4. 注册为windows服务
sonar自带的有注册与删除服务的方法,采用wrapper注册为服务,如下已管理员方式运行InstallNTService.bat即可:

注册为服务之后我这里启动服务报错不能正常启动服务,到 %sonar%/logs/sonar.log中查看原因如下:
Launching a JVM...
Unable to execute Java command. 系统找不到指定的文件。 (0x2)
解决办法:修改%sonar%/conf/wrapper.conf中java的路径为绝对路径

补充:sonar-scanner的配置也可以进行分模块配置,比如我想检测一个web项目的所有文件(包括Java、JSP、JS、Html、XML),如下:
0. 如果检测html和JSP需要下载sonar-html-plugin-3.1.0.1615.jar插件置于sonarqube-6.7.6\extensions\plugins目录下,而且html的language为web,jsp的language为jsp

1.项目结构如下:

2.sonar-project.properties配置文件如下:
# must be unique in a given SonarQube instance
sonar.projectKey=my:project
# this is the name displayed in the SonarQube UI
sonar.projectName=sonarTest
sonar.projectVersion=1.0
sonar.modules=java-module,javascript-module,xml-module,jsp-module,html-module
sonar.sourceEncoding=UTF-8 # Java module
java-module.sonar.projectName=Java Module
java-module.sonar.language=java
java-module.sonar.projectBaseDir=.
java-module.sonar.sources=src
#ignore files and directory
java-module.sonar.exclusions=src/cn/qlq/test2/**,src/cn/qlq/test3.java
sonar.java.binaries=./build # JavaScript module
javascript-module.sonar.projectName=JavaScript Module
javascript-module.sonar.projectBaseDir=.
javascript-module.sonar.language=js
javascript-module.sonar.sources=WebContent # Jsp module
jsp-module.sonar.projectName=Jsp Module
jsp-module.sonar.projectBaseDir=.
jsp-module.sonar.language=jsp
jsp-module.sonar.sources=WebContent # Html module
html-module.sonar.projectName=Html Module
html-module.sonar.projectBaseDir=.
html-module.sonar.language=web
html-module.sonar.sources=WebContent #Xml module
xml-module.sonar.projectName=Xml Module
xml-module.sonar.projectBaseDir=.
xml-module.sonar.language=xml
xml-module.sonar.sources=WebContent
3.测试结果从web上访问如下:

补充:sonar集成阿里的p3c规则
1.下载插件
到https://github.com/mrprince/sonar-p3c-pmd/releases 下载jar包即可
2.jar放在sonarqube-6.7.6\extensions\plugins目录下
3.重启sonarqube
4.到网页规则搜索p3c,如下

5. 创建规则,不用选文件,如下:

6.接下来激活p3c规则 (选择上面的创建的p3c,同时搜索未激活的p3c,然后激活即可。如果p3c也需要即可sonar的自带规则就不要加搜索条件,选择所有的规则)

7.查看p3c激活的规则 (48条)

8. 到质量配置设为java默认规则即可

9.简单的测试
sonar自带的与p3c规则最明显的区别是:
str.equals("xxx")在p3c会被检测,在自带规则不会被检测到。
System.out.print... 会被自带规则检测到,p3c不会检测到。
sonar的安装以及使用的更多相关文章
- sonar的安装与代码质量检测实例
		
说明:sonar依赖数据库. mysql优化 1.笔者使用的是mysql数据库.首先对mysql做简单的优化配置. [root@localhost bin]# cat /etc/my.cnf [mys ...
 - sonar之安装篇
		
sonar 是一个很好的质量度量平台,安装方式有很多种.下面我教大家使用j2ee 容器的方式安装,我们使用tomcat 1.准备: 1.1 环境redhat linux1.2 下载sonar 从htt ...
 - Ant, JUnit以及Sonar的安装+入门资料
		
Ant 感觉是个和Make/Grunt类似的东东,build一个项目用的.安装很容易,跟装JDK类似,就是解压->设环境变量->没了.注意装之前要先确认Java装好了(有点废话). 下载地 ...
 - [ci]sonar sonar-runner安装并实现手动扫描项目
		
安装sonar: 下载地址:https://www.sonarqube.org/downloads/ wget https://sonarsource.bintray.com/Distribution ...
 - Mac上sonar插件的安装及使用
		
本文主要讲解sonar的安装及使用. 分为两个维度来讲解 1. 使用sonarqube以及自带的Derby数据库 2. 使用sonarqube以及配置mysql数据库 ---------------- ...
 - 代码检查工具 Sonar 安装&使用
		
本文主要说明Sonar的安装方式并附上依赖安装包,本文目标只实现本地搭建测试的Sonar环境,以及本地的测试项目的非定制化扫描 本机测试环境:Win10-X64,.vs2017 依赖包: 1 ...
 - [转]配置sonar、jenkins进行持续审查
		
本文以CentOS操作系统为例介绍Sonar的安装配置,以及如何与Jenkins进行集成,通过pmd-cpd.checkstyle.findbugs等工具对代码进行持续审查. 一.安装配置sonar ...
 - 配置sonar、jenkins进行持续审查
		
本文以CentOS操作系统为例介绍Sonar的安装配置,以及如何与Jenkins进行集成,通过pmd-cpd.checkstyle.findbugs等工具对代码进行持续审查. 一.安装配置sonar ...
 - SonarQube代码质量管理平台安装与使用
		
Sonar简介 Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量 通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaS ...
 
随机推荐
- (字典序问题) nyoj1542-最小字符串
			
题目描述: 给你一个由小写字母组成的字符串,最多删除其中一个字符,使其字典序最小. 字典序概念在数学中,字典或词典顺序(也称为词汇顺序,字典顺序,字母顺序或词典顺序)是基于字母顺序排列的单词按字母顺序 ...
 - qml: QtCharts模块得使用(数据整合和显示) ---- <二>
			
QtCharts目前已经可以免费使用,而且使用非常方便.快捷,并且提供了各种类别的支持(例如:曲线图,柱形图,折线图,饼图等). 这里讲解qml端图表显示,C++端进行数据整合,并能实现实时数据刷新( ...
 - Mac 上有哪些鲜为人知且极大提高效率的工具?
			
来源:知乎文章收录于:风云社区SCOEE,提供上千款各类mac软件下载 1. Focus  功能: 屏蔽影响你学习的网站.  同类软件:Self Control, Rescue Time  特点 ...
 - CodeForces165E 位运算 贪心 + 状压dp
			
http://codeforces.com/problemset/problem/165/E 题意 两个整数 x 和 y 是 兼容的,如果它们的位运算 "AND" 结果等于 0,亦 ...
 - JavaEE正常开发怎么做
			
如果不使用第三方框架,用JavaEE的内容怎么去开发呢? 例如这里有一个需求: 最传统的方案如下:
 - SpringMvc+jQuery 文件拖拽上传、选择上传
			
最近做了个简易的基于boostrap的文件上传功能,jsp版本的,后续会完善更多的功能,不过现在已经能用了,需要的小伙伴,直接引用下面的文件内容直接copy到自己的项目中就ok了,效果如图: file ...
 - spring+springmvc+ibatis整合注解方式实例【转】
			
源自-----> http://shaohan126448.iteye.com/blog/2033563 (1)web.xml文件(Tomcat使用) 服务器根据配置内容初始化spring框架, ...
 - typdef void(*fun)(void)笔记【函数指针/typdef函数指针】
			
1. 函数指针:返回类型(*函数名)(参数表) 2. 使用typdef void(*fun)(void) typedef的功能是定义新的类型.第一句就是定义了一个MyFun的类型,并定义这种类型为 指 ...
 - nginx配置fcgi
			
1.刚开始用网上最多的方式,perl脚本实现cgi,配置最后都完成,一直是504错误,看日志是perl脚本连接超时,可能是版本太旧了吧,nginx更新用不了那种方式了,搞不清楚.貌似那种帖子都是13年 ...
 - 使用wget命令下载JDK失败(文件特别小)
			
问题RT: 我们在网页上下载的时候要点一下 “Accept License Agreement ” ,使用wget下载的时候也需要提交这个 accept,方法如下: wget --no-check-c ...