eclipse和IDEA可以安裝 sonarlint插件幫你發現代碼里面的bug
須知:這里使用sonarQube7.9版本(持續更新且穩定),數據庫使用pg10版本
1. 簡介
(1) sonar是什么
Sonar是一個用於代碼質量管理的開源平台,用於管理代碼的質量,通過插件形式可以支持二十幾種語言的代碼質量檢測,通過多個維度的檢查了快速定位代碼中潛在的或者明顯的錯誤。
(2) SonarQube與Sonar
SonarQube是sonar的服務端,相當於一個web服務器中的tomcat,用來發布應用,在線瀏覽分析等。
2.安裝
官網下載后解壓即可,下載后啟動StartSonar.bat,去瀏覽器訪問localhost:9000端口(默認9000端口,可改動)出現下圖說明啟動成功(sonarQube內置h2數據庫,不配置數據庫也可用於測試)
JDK使用11版本
(如果出現遠程主機強迫關閉了一個現有的連接。沒配置數據庫之前為端口占用問題,去配置文件里將端口號改成其他的即可,或者去命令行里查看9000端口被那個進程占用,結束他即可,
推薦更改端口號(sonar.properties文件中的sonar.web.port=要修改的端口號),
sonar.web.port=9090
配置數據庫了是sonar連不上數據庫或端口占用,測試數據庫是否可以連接)
3.配置數據庫
這里采用pg數據庫10版本(sonarQube7.9及以上版本不支持mysql),若要使用mysql數據庫則安裝7.8版本且mysql為5.7版本(sonarQube不支持mysql5.7以下和8及以上版本)
去pg里新建sonar數據庫,去sonarqube-7.9.5\conf修改
sonar.properties文件
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonar?currentSchema=public
sonar.jdbc.username=mypostgres
sonar.jdbc.password=mypostgres
sonar.web.port=9090
打開任務管理器,詳細信息-java.exe結束進程
然后雙擊sonarqube-7.9.5\bin\windows-x86-64下面的StartSonar.bat重啟sonarQube,等待一會,直到出現sonarQube is up字樣
啟動完畢后去sonarQube查看配置及數據庫。
3. 代碼分析
下載下載sonar-scanner,解壓,配置環境變量,以為win10為例 選中path--編輯--新建--輸入地址 C:\sonar-scanner-4.5.0.2216-windows\bin
環境變量配置了后確認無誤,單還是提示不是內部或外部命令,去path里把sonar-canner環境變量往上提升到前三位置
輸入sonar-scanner --version出現版本信息表示配置成功
4.1代碼分析(單項目單模塊)
去需要分析的項目根目錄下新建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
#忽略文件和目錄
sonar.exclusions=
# Encoding of the source code. Default is default system encoding
#sonar.sourceEncoding=UTF-8
字段意思:
Sonar.projectKey:項目的key,包住唯一即可,一般為項目名稱
sonar.projectName:項目名稱
sonar.projectVersion:版本號
sonar.sources:是源文件所在的目錄
sonar.java.binaries:項目編譯后的class文件的目錄
文件配置好后,修改sonar-scanner.properties配置文件,配置掃描的結果同步到哪個數據庫
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonar?currentSchema=public
sonar.jdbc.username=mypostgres
sonar.jdbc.password=mypostgres
sonar.sourceEncoding=UTF-8
sonar.login=admin
sonar.password=admin
sonar.host.url=http://localhost:9090
都配置好后,win+R,cd命令跳轉到根目錄執行sonar-scanner命令,執行成功則出現如下界面:
訪問9000端口的Issues(問題)查看分析結果
可在左側的我的問題中選擇代碼存在的問題的種類
4.2單項目(多模塊)
sonar-project.properties配置,簡單版示例,
#項目id,唯一標識
sonar.projectKey=my:project
#項目名
sonar.projectName=my_project
#版本
sonar.projectVersion=1.0
#掃描源碼,多模塊,每個模塊用逗號分割
ds-eop.sonar.sources=xxx/src/main/java,
xxx-client/src/main/java,
xxx-web/src/main/java,
xxx-war/src/main/java
#編譯好的class文件存放位置
ds-eop-client.sonar.java.binaries=./xxx/target/classes
./xxx-client/target/classes,
./xxx-web/target/classes,
./xxx-war/target/classes
與單模塊類似,只是在sources里的掃描文件變為多個,以逗號隔開,binaries也類似。
- 掃描web項目
先到配置-應用市場-插件里下載web插件
然后新建項目
去根目錄下執行此命令
補充:
sonar-scanner的配置也可以進行分模塊配置,比如我想檢測一個web項目的所有文件(包括Java、JSP、JS、Html、XML),如下:
如果檢測html和JSP需要下載sonar-html-plugin-3.1.0.1615.jar插件置於extensions\plugins目錄下,而且html的language為web,jsp的language為jsp
# 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
#忽略文件和目錄
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
#項目id,唯一標識
sonar.projectKey=my:project
#項目名
sonar.projectName=my_project
#版本
sonar.projectVersion=1.0
sonar.sourceEncoding=UTF-8
#包含模塊
sonar.modules=xxx,xxx-client,xxx-war,xxx-web
xxx.sonar.projectName=xxx
xxx.sonar.modules=java-module,xml-module
# Java module
xxx.java-module.sonar.projectName=xxx-java-module
xxx.java-module.sonar.sources=src/main/java,src/test/java
xxx.java-module.sonar.java.binaries=./target/classes
xxx.java-module.sonar.language=java
xxx.java-module.sonar.projectBaseDir=.
#Xml module
xxx.xml-module.sonar.projectName=xxx-xml-module
xxx.xml-module.sonar.projectBaseDir=.
xxx.xml-module.sonar.language=xml
xxx.xml-module.sonar.sources=src/main/resources,src/test/resources
####################################################################################################
xxx-client.sonar.projectName=xxx-client
xxx-client.sonar.modules=java-module,xml-module
xxx-client.java-module.sonar.projectName=xxx-client-java-module
xxx-client.java-module.sonar.sources=src/main/java,src/test/java
xxx-client.java-module.sonar.java.binaries=./target/classes
xxx-client.java-module.sonar.language=java
xxx-client.java-module.sonar.projectBaseDir=.
xxx-client.xml-module.sonar.projectName=xxx-client-xml-module
xxx-client.xml-module.sonar.projectBaseDir=.
xxx-client.xml-module.sonar.language=xml
xxx-client.xml-module.sonar.sources=src/main/resources,src/test/resources
####################################################################################################
xxx-web.sonar.projectName=xxx-web
xxx-web.sonar.modules=java-module,xml-module
xxx-web.java-module.sonar.projectName=xxx-web-java-module
xxx-web.java-module.sonar.sources=src/main/java,src/test/java
xxx-web.java-module.sonar.java.binaries=./target/classes
xxx-web.java-module.sonar.language=java
xxx-web.java-module.sonar.projectBaseDir=.
xxx-web.xml-module.sonar.projectName=xxx-web-xml-module
xxx-web.xml-module.sonar.projectBaseDir=.
xxx-web.xml-module.sonar.language=xml
xxx-web.xml-module.sonar.sources=src/main/resources,src/test/resources
####################################################################################################
xxx-war.sonar.projectName=xxx-war
xxx-war.sonar.modules=java-module,xml-module,html-javascript-module
xxx-war.java-module.sonar.projectName=xxx-war-java-module
xxx-war.java-module.sonar.sources=src/main/java,src/test/java
xxx-war.java-module.sonar.java.binaries=./target/classes
xxx-war.java-module.sonar.language=java
xxx-war.java-module.sonar.projectBaseDir=.
xxx-war.xml-module.sonar.projectName=xxx-war-xml-module
xxx-war.xml-module.sonar.projectBaseDir=.
xxx-war.xml-module.sonar.language=xml
xxx-war.xml-module.sonar.sources=src/main/resources,src/test/resources
# html-javascript-module
xxx-war.html-javascript-module.sonar.projectName=xxx-war-javaScript-module
xxx-war.html-javascript-module.sonar.projectBaseDir=.
xxx-war.html-javascript-module.sonar.language=web,js
xxx-war.html-javascript-module.sonar.sources=src/main/webapp
漢化:到https://docs.sonarqube.org/display/PLUG/Plugin+Library 網站搜索 chinese pack 找到自己的版本對應的jar包版本
然后點擊到對應的git地址https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases下載對應版本的jar包,下載之后放到extensions\plugins目錄下面重啟即可,
5. 注冊為windows服務
去conf目錄下打開wrapper.conf文件,將wrapper.java.command的java改問jdk中java.exe的絕對路徑
sonar自帶的有注冊與刪除服務的方法,采用wrapper注冊為服務,如下已管理員方式運行InstallNTService.bat即
集成阿里p3c規則:
1.下載插件
p3c的jar包為3.2版本,版本不對可能啟動不了sonar-pmd-plugin-3.2.0-SNAPSHOT.jar
2.jar放在sonarqube-7.9.5\extensions\plugins目錄下
3.重啟sonarqube
4.去質量配置,右上角,創建,名字自定義,語言java
5.到網頁規則搜索p3c,如下
- 接下來激活p3c規則 (選擇上面的創建的p3c,同時搜索未激活的p3c,然后激活即可。如果p3c也需要即可sonar的自帶規則就不要加搜索條件,選擇所有的規則)
- 查看p3c激活的規則
- 到質量配置設為java默認規則即可