Windows下配置SonarQube Scanner檢測分析程式碼
Windows下配置SonarQube Scanner檢測分析程式碼
首先這裡繼續引用下SonarQube的架構圖,在上文中記錄了Windows下SonarQube服務及資料庫環境的配置,本文則在此基礎上,簡單記錄SonarQube Scanner程式碼分析工具的配置及使用,文中發現有問題或疏漏,希望可以得到您的反饋。
對於SonarQube Scanner這裡不做太多介紹了,至於為什麼使用SonarQube Scanner,看這裡
SonarQube官方文件 推薦使用,更多原因,自行百度了~
Maven配置SonarQube Scannar實現程式碼分析
此處通過在Maven中配置Sonar Scanner,然後使用
mvn sonar:sonar
命令完成對程式碼的分析,該方式針對Maven構建專案,Gradle構建的專案未測試,自行嘗試。
Maven環境配置
為了可以使用Maven命令執行Sonar來分析專案程式碼,首先需要將Maven的bin目錄新增到環變數內,如下:
配置完成後,在命令列視窗使用命令 mvn -v
檢視Maven版本等資訊,驗證環境變數配置完成
Maven增加SonarQube Scanner配置
首先在 Maven 的 conf
目錄下找到Maven的配置檔案 settings.xml
<profiles>
節點,在其中新增SonarQube Scanner的配置,如下圖:
<profiles>
<!-- 複製以下內容 -->
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties >
<!-- 配置 Sonar服務地址,此處為本地服務 -->
<sonar.host.url>
http://127.0.0.1:9000/
</sonar.host.url>
</properties>
</profile>
<!-- 複製以上內容 -->
</profiles>
注意: 若在Maven的
conf
目錄下未找到settings.xml
配置檔案,則可以在Maven倉庫預設目錄C:\Users\[你登陸賬號的使用者名稱]\.m2
下查詢。
Maven專案目錄執行命令分析
進入想要檢測分析的Maven專案目錄,在專案根目錄開啟命令列,輸入命令 mvn sonar:sonar
首次進行程式碼檢測掃描時,會下載SonarQube Scanner相關jar包,類似下圖:
掃描完成後,會看到 BUILD SUCCESS
的提示,到此程式碼的檢測掃描完成。
IDEA內通過Maven執行SonarQube Scanner分析
下面介紹,在上步操作完成的基礎上,怎麼在IDEA開發工具內使用使用SonarQube Scanner進行程式碼檢測分析。
首先IDEA開啟需要檢測分析的Maven專案,在 Run/Debug Configurations
中,新增一個Maven的執行配置,具體配置如下:
配置完成後,選擇此執行方式,點選執行,控制檯可以看到類似上步中命令列視窗的輸出內容,等待出現 BUILD SUCCES
的提示字樣後,表示程式碼的檢測分析完成,此時可以在SonarQube服務內檢視分析結果。此處僅測試IDEA環境,Eclipse等其他IDE開發工具自行測試。
SonarQube Scanner配置
前面說了Maven使用SonarQube Scanner完成對Maven程式碼的檢測分析,下面記錄直接下載的SonarQube Scanner配置及使用。
SonarQube Scanner下載
可以在此處下載支援各種環境的SonarQube Scanner,根據自己需要進行選擇即可。在SonarQube官網下載對應系統版本的SonarQube Scanner cli,該版本支援命令列模式。
下載完成後,任意目錄下解壓,目錄結構大致如下,目錄作用類似SonarQube
SonarQube Scanner配置
-
配置環境變數(為了可以全域性使用SonarQube Scanner)
-
驗證環境變數是否配置成功
-
新增檢測掃描的專案
開啟SonarQube Scanner的配置檔案(..\sonar-scanner-3.2.0.1227-windows\conf\sonar-scanner.properties
) ,配置如下
#----- Default SonarQube server
sonar.host.url=http://localhost:9000
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
# 配置專案的Key(每個專案唯一的專案鍵,使用Maven時設定為 <groupId>:<artifactId>)
sonar.projectKey=com.codersoft:cms
# 配置分析的專案在SonarQube服務介面顯示的名稱
sonar.projectName=cms
# 配置分析的專案的版本(使用Maven時取<version>的值)
sonar.projectVersion=1.0
# 配置要分析的專案根目錄
sonar.projectBaseDir=D:/work/workspace/gitee/cms/rbac/cms
# 配置包含原始檔的目錄(未設定,則從預設的Maven原始碼位置檢索)
sonar.sources=.
新增完成後,命令列視窗,執行命令 sonar-scanner -Dsonar.java.binaries=.
(SonarQube的sonar-java-plugin外掛版本大於4.12後,不能直接使用 sonar-scanner
命令,需要提供對應原始碼的位元組碼,詳情看文末異常問題記錄)
更多SonarQube Scanner內容見SonarQube官網文件, 更多SonarQube配置的分析引數見此處
IDEA配置SonarLint外掛
IDEA支援不少用於程式碼質量檢測的外掛,如阿里巴巴的程式碼規範外掛、FindBugs等,此處可以嘗試使用SonarLint外掛。
SonarLint外掛安裝
在IDEA中開啟設定介面( File -> Settings
) , 選擇 Plugins
進入IDEA的外掛市場搜尋 SonarLint
進行安裝
等待下載安裝完成後,重啟的IDEA中即可完成安裝。
安裝完成重啟IDEA後,會出現如下提示,此時需要對SonarLint外掛進行配置
安裝提示,點選 SonarLint project configuration
進行SonarLint 專案的配置
或在設定中進行配置
此處關閉遠端SonarQube Server的繫結,即使用本地SentLint外掛預設的程式碼檢測規則。這樣就可以在本地環境下使用預設規則進行程式碼檢測分析,可以點選選單項 Analyze
,找到 Aanlyze all files with SonarLint
的子選單項
嘗試點選此項,來檢測分析當前專案的所有檔案
單個檔案的檢測,可以在想檢測檔案右鍵選擇 SonarLint
進行檢測,具體操作此處不贅述。
SonarLint外掛配置
SonarQube可以針對專案進行檢測規則等設定,要讓IDEA中SonarLint外掛同步使用SonarQube服務中更新的規則,則需要如下配置
-
配置SonarQube Server
支援兩種登陸驗證方式,此處使用本地SonarQube服務,則使用賬號密碼登陸(遠端專案,可以使用Token驗證)
-
繫結配置SonarQube服務內的專案,用於同步檢測規則
注意:SonarQube沒有服務時,此處無法配置,可以通過SonarQube Scanner或Maven來進行專案程式碼的檢測分析,實現專案的新增。
配置完成後,回到服務配置介面,點選更新規則,即可獲取SonarQube服務上針對該專案配置的檢測規則。
最後,SonarQube的Token,可以在使用者設定裡進行增刪
SonarQube服務內檢視分析結果
完成程式碼的分析檢測後,可以在瀏覽器訪問SonarQube服務地址,此處為本地搭建服務,則訪問地址 http:\\localhost:9000
可以在Sonar服務管理頁面內看到新掃描的Maven專案的分析報告,此時根據需要檢視對應內容,不再贅述。
SonarQube Scanner異常問題記錄
SonarQube Scanner執行
sonar-scanner
命令時,出現錯誤時,可以通過執行sonar-scanner -X
來輸出詳細錯誤日誌,方便問題的排查。
異常 AnalysisException: Please provide compiled classes of your project with sonar.java.binaries property
該問題原因見官方文件
大體意思,自SonarJava 4.12後,不使用Maven或Gradle構建工具來分析程式碼時,必須手動提供與原始碼對應的位元組碼,否則就會分析失敗,並出現該異常提示。
可以嘗試通過以下方式處理:
-
執行命令修改為
sonar-scanner -Dsonar.java.binaries=.
-
或在配置檔案內新增下列配置(追加內容在上文基礎上進行)
# sonar.sources=. # 此處配置該專案的子專案的原始碼檔案目錄 sonar.sources=./cms-common/src,./cms-dao/src,./cms-service/src,./cms-tester/src,./cms-web/src # SonarJava 4.12 以後,不使用Maven等構建工具分析程式碼,則必須手動提供對應原始碼的位元組碼 # 此處配置該專案的子專案的class位元組碼檔案目錄 sonar.java.binaries=./cms-common/target/classes,./cms-dao/target/classes,./cms-service/target/classes,./cms-tester/target/test-classes,./cms-web/target/classes
-
下載SonarJava 4.12之前版本的外掛,替換現有版本,外掛原始碼下載地址,外掛jar包下載地址下載完成後,替換..\sonarqube-6.7.5\extensions\plugins\
目錄下的sonar-java-plugin-xxx.jar
(本文SonarQube的SonarJava外掛版本為5.7.0.15470
) ,重啟SonarQube服務即可。
網上很多文章提供第三種方法解決該異常,我下載了 4.10.0.10260
版本的java外掛jar包,按照此思路替換外掛jar包後,重啟服務,如出現下圖提示情況
且執行 sonar-scanner
命令出現SonarQube服務(本文已經將SonarQube服務配置為系統服務)停止的情況,在嘗試清理 c:\user\[你當前登陸計算機的使用者名稱]\.sonar
下的檔案全部刪除,然後重啟服務,依舊出現上文提示,且服務過一段時間也會停止執行。具體原因暫不明確,初步認為是外掛版本問題,不知是否還有還是其他問題,未做更多版本測試,本文暫不推薦第三種方法處理,如遇到此情況,且知道解決方案的希望告知,謝謝。