SonarQube是管理代碼質(zhì)量一個(gè)開(kāi)放平臺(tái),可以快速的定位代碼中潛在的或者明顯的錯(cuò)誤,下面將會(huì)介紹一下這個(gè)工具的安裝、配置以及使用。
簡(jiǎn)介
1. sonar是什么
Sonar是一個(gè)用于代碼質(zhì)量管理的開(kāi)源平臺(tái),用于管理代碼的質(zhì)量,通過(guò)插件形式可以支持二十幾種語(yǔ)言的代碼質(zhì)量檢測(cè),通過(guò)多個(gè)維度的檢查了快速定位代碼中潛在的或者明顯的錯(cuò)誤。
2. SonarQube與Sonar
SonarQube是sonar的服務(wù)端,相當(dāng)于一個(gè)web服務(wù)器中的tomcat,用來(lái)發(fā)布應(yīng)用,在線瀏覽分析等。
安裝
1.下載sonarqubexxx.zip并且解壓即可:
下載地址:http://www.sonarqube.org/downloads/
下載完成后解壓后點(diǎn)擊StartSonar.bat啟動(dòng)即可,如下:
http訪問(wèn)9000端口出現(xiàn)下面則證明安裝成功。 (如果需要修改端口等信息修改sonarqube-6.7.6\conf\sonar.properties即可)
2.配置數(shù)據(jù)庫(kù)
-
在mysql數(shù)據(jù)庫(kù)新建一個(gè)庫(kù)的名稱為sonar
-
修改sonar/conf/sonar.properties的db信息:
不用放置驅(qū)動(dòng)包,也不用創(chuàng)建表。
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會(huì)自動(dòng)建表。
4.接下來(lái)訪問(wèn)9000端口然后進(jìn)行登錄即可。默認(rèn)創(chuàng)建的用戶名和密碼都是admin??梢栽趕ystem選項(xiàng)卡看到系統(tǒng)信息
使用
1.下載sonar-scanner:(這個(gè)工具是對(duì)源碼進(jìn)行掃描,并將結(jié)果保存到數(shù)據(jù)庫(kù)以便用上面的sonarqube進(jìn)行分析)
下載地址: 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.配置環(huán)境變量 并測(cè)試
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 (64-bit)
INFO: Windows 10 10.0 amd64
4.打開(kāi)要進(jìn)行代碼分析的項(xiàng)目根目錄,新建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是項(xiàng)目名字,sources是源文件所在的目錄;sonar.java.binaries是項(xiàng)目編譯后的class文件的目錄。
5.設(shè)置成功后,啟動(dòng)sonarqube服務(wù)
6.開(kāi)始分析:
cmd窗口進(jìn)入到項(xiàng)目的根路徑,執(zhí)行下面命令即可:
E:\xiangmu\springboot-ssm>sonar-scanner
如下:
7.訪問(wèn)9000端口查看分析結(jié)果
項(xiàng)目分析概要圖:
查看存在的bug:
8.選擇一個(gè)bug進(jìn)行查看(可以看到與git也進(jìn)行了集成,可以看到編寫(xiě)人與時(shí)間以及bug的原因)
此工具還分析出一些異常信息的記錄等,如下:
9. 解決下面的bug
代碼修改為下面即可:(上面邏輯應(yīng)該是沒(méi)有錯(cuò),只是在多次改變引用的情況下被檢測(cè)為bug)
@Override
public Token addOrUpdateToken(String username) {
// 1.判斷是否有對(duì)應(yīng)的token,如果有的話更新時(shí)間,沒(méi)有的話就創(chuàng)建token并且返回
Token token = findTokenByUsername(username);
// 1.1創(chuàng)建token并返回
if (token == null) {
return generateAndSaveTokenByUserName(username);
}
// 1.2根據(jù)失效時(shí)間更新且返回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.程序中故意寫(xiě)一個(gè)空指針異??词欠窨梢詸z測(cè)出來(lái)
String string = null;
if(string.equals("xxx")){
System.out.println("xxx");
}
結(jié)果:
更多的學(xué)習(xí)參考官網(wǎng):
https://docs.sonarqube.org/display/SCAN/Advanced+SonarQube+Scanner+Usages
https://www.sonarqube.org/
補(bǔ)充:sonarqube漢化
到https://docs.sonarqube.org/display/PLUG/Plugin+Library 網(wǎng)站搜索 chinese pack
然后點(diǎn)擊到對(duì)應(yīng)的git地址https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases下載對(duì)應(yīng)版本的jar包,下載之后放到sonar\sonarqube-6.7.6\extensions\plugins目錄下面重啟即可,如下:
再次通過(guò)9000端口訪問(wèn)發(fā)現(xiàn)變?yōu)橹形陌?
注冊(cè)為windows服務(wù)
sonar自帶的有注冊(cè)與刪除服務(wù)的方法,采用wrapper注冊(cè)為服務(wù),如下已管理員方式運(yùn)行InstallNTService.bat即可:
注冊(cè)為服務(wù)之后我這里啟動(dòng)服務(wù)報(bào)錯(cuò)不能正常啟動(dòng)服務(wù),到 %sonar%/logs/sonar.log中查看原因如下:
Launching a JVM...
Unable to execute Java command. 系統(tǒng)找不到指定的文件。 (0x2)
解決辦法:修改%sonar%/conf/wrapper.conf中java的路徑為絕對(duì)路徑
補(bǔ)充:sonar-scanner的配置也可以進(jìn)行分模塊配置,比如我想檢測(cè)一個(gè)web項(xiàng)目的所有文件(包括Java、JSP、JS、Html、XML),如下:
0. 如果檢測(cè)html和JSP需要下載sonar-html-plugin-3.1.0.1615.jar插件置于sonarqube-6.7.6\extensions\plugins目錄下,而且html的language為web,jsp的language為jsp
1.項(xiàng)目結(jié)構(gòu)如下:
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.測(cè)試結(jié)果從web上訪問(wèn)如下:
補(bǔ)充:sonar集成阿里的p3c規(guī)則
1.下載插件
到https://github.com/mrprince/sonar-p3c-pmd/releases 下載jar包即可
2.jar放在sonarqube-6.7.6\extensions\plugins目錄下
3.重啟sonarqube
4.到網(wǎng)頁(yè)規(guī)則搜索p3c,如下
5. 創(chuàng)建規(guī)則,不用選文件,如下:
6.接下來(lái)激活p3c規(guī)則 (選擇上面的創(chuàng)建的p3c,同時(shí)搜索未激活的p3c,然后激活即可。如果p3c也需要即可sonar的自帶規(guī)則就不要加搜索條件,選擇所有的規(guī)則)
7.查看p3c激活的規(guī)則 (48條)
8. 到質(zhì)量配置設(shè)為java默認(rèn)規(guī)則即可
9.簡(jiǎn)單的測(cè)試
sonar自帶的與p3c規(guī)則最明顯的區(qū)別是:
str.equals(“xxx”)在p3c會(huì)被檢測(cè),在自帶規(guī)則不會(huì)被檢測(cè)到。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-446944.html
System.out.print… 會(huì)被自帶規(guī)則檢測(cè)到,p3c不會(huì)檢測(cè)到。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-446944.html
到了這里,關(guān)于【代碼質(zhì)量管理開(kāi)源平臺(tái)】sonar的安裝以及使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!