sonar安裝及使用教程


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也類似。

  1. 掃描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,如下

 

  1. 接下來激活p3c規則 (選擇上面的創建的p3c,同時搜索未激活的p3c,然后激活即可。如果p3c也需要即可sonar的自帶規則就不要加搜索條件,選擇所有的規則)

 

  1. 查看p3c激活的規則

 

  1.  到質量配置設為java默認規則即可

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM