首先這裏繼續引用下SonarQube的架構圖,在上文中記錄了Windows下SonarQube服務及數據庫環境的配置,本文則在此基礎上,簡單記錄SonarQube Scanner代碼分析工具的配置及使用,文中發現有問題或疏漏,但願能夠獲得您的反饋。java
對於SonarQube Scanner這裏不作太多介紹了,至於爲何使用SonarQube Scanner,看這裏git
SonarQube官方文檔 推薦使用,更多緣由,自行百度了~github
此處經過在Maven中配置Sonar Scanner,而後使用
mvn sonar:sonar
命令完成對代碼的分析,該方式針對Maven構建項目,Gradle構建的項目未測試,自行嘗試。web
爲了可使用Maven命令運行Sonar來分析項目代碼,首先須要將Maven的bin目錄添加到環變量內,以下:數據庫
配置完成後,在命令行窗口使用命令 mvn -v
查看Maven版本等信息,驗證環境變量配置完成windows
首先在 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項目目錄,在項目根目錄打開命令行,輸入命令 mvn sonar:sonar
jsp
首次進行代碼檢測掃描時,會下載SonarQube Scanner相關jar包,相似下圖:ide
掃描完成後,會看到 BUILD SUCCESS
的提示,到此代碼的檢測掃描完成。
下面介紹,在上步操做完成的基礎上,怎麼在IDEA開發工具內使用使用SonarQube Scanner進行代碼檢測分析。
首先IDEA打開須要檢測分析的Maven項目,在 Run/Debug Configurations
中,添加一個Maven的運行配置,具體配置以下:
配置完成後,選擇此運行方式,點擊運行,控制檯能夠看到相似上步中命令行窗口的輸出內容,等待出現 BUILD SUCCES
的提示字樣後,表示代碼的檢測分析完成,此時能夠在SonarQube服務內查看分析結果。此處僅測試IDEA環境,Eclipse等其餘IDE開發工具自行測試。
前面說了Maven使用SonarQube Scanner完成對Maven代碼的檢測分析,下面記錄直接下載的SonarQube Scanner配置及使用。
能夠在此處下載支持各類環境的SonarQube Scanner,根據本身須要進行選擇便可。在SonarQube官網下載對應系統版本的SonarQube Scanner cli,該版本支持命令行模式。
下載完成後,任意目錄下解壓,目錄結構大體以下,目錄做用相似SonarQube
配置環境變量(爲了能夠全局使用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支持很多用於代碼質量檢測的插件,如阿里巴巴的代碼規範插件、FindBugs等,此處能夠嘗試使用SonarLint插件。
在IDEA中打開設置界面( File -> Settings
) , 選擇 Plugins
進入IDEA的插件市場搜索 SonarLint
進行安裝
等待下載安裝完成後,重啓的IDEA中便可完成安裝。
安裝完成重啓IDEA後,會出現以下提示,此時須要對SonarLint插件進行配置
安裝提示,點擊 SonarLint project configuration
進行SonarLint 項目的配置
或在設置中進行配置
此處關閉遠端SonarQube Server的綁定,即便用本地SentLint插件默認的代碼檢測規則。這樣就能夠在本地環境下使用默認規則進行代碼檢測分析,能夠點擊菜單項 Analyze
,找到 Aanlyze all files with SonarLint
的子菜單項
嘗試點擊此項,來檢測分析當前項目的全部文件
單個文件的檢測,能夠在想檢測文件右鍵選擇 SonarLint
進行檢測,具體操做此處不贅述。
SonarQube能夠針對項目進行檢測規則等設置,要讓IDEA中SonarLint插件同步使用SonarQube服務中更新的規則,則須要以下配置
配置SonarQube Server
支持兩種登錄驗證方式,此處使用本地SonarQube服務,則使用帳號密碼登錄(遠端項目,可使用Token驗證)
綁定配置SonarQube服務內的項目,用於同步檢測規則
注意:SonarQube沒有服務時,此處沒法配置,能夠經過SonarQube Scanner或Maven來進行項目代碼的檢測分析,實現項目的添加。 配置完成後,回到服務配置界面,點擊更新規則,便可獲取SonarQube服務上針對該項目配置的檢測規則。
最後,SonarQube的Token,能夠在用戶設置裏進行增刪
完成代碼的分析檢測後,能夠在瀏覽器訪問SonarQube服務地址,此處爲本地搭建服務,則訪問地址 http:\\localhost:9000
能夠在Sonar服務管理頁面內看到新掃描的Maven項目的分析報告,此時根據須要查看對應內容,再也不贅述。
SonarQube Scanner執行
sonar-scanner
命令時,出現錯誤時,能夠經過執行sonar-scanner -X
來輸出詳細錯誤日誌,方便問題的排查。
該問題緣由見官方文檔
大致意思,自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
下的文件所有刪除,而後重啓服務,依舊出現上文提示,且服務過一段時間也會中止運行。具體緣由暫不明確,初步認爲是插件版本問題,不知是否還有仍是其餘問題,未作更多版本測試,本文暫不推薦第三種方法處理,如遇到此狀況,且知道解決方案的但願告知,謝謝。