Windows環境配置SonarQube Scanner實現代碼檢測分析

Windows下配置SonarQube Scanner檢測分析代碼

SonarQube 架構

首先這裏繼續引用下SonarQube的架構圖,在上文中記錄了Windows下SonarQube服務及數據庫環境的配置,本文則在此基礎上,簡單記錄SonarQube Scanner代碼分析工具的配置及使用,文中發現有問題或疏漏,但願能夠獲得您的反饋。java

對於SonarQube Scanner這裏不作太多介紹了,至於爲何使用SonarQube Scanner,看這裏git

SonarQube 官方文檔推薦

SonarQube官方文檔 推薦使用,更多緣由,自行百度了~github

Maven配置SonarQube Scannar實現代碼分析

此處經過在Maven中配置Sonar Scanner,而後使用 mvn sonar:sonar 命令完成對代碼的分析,該方式針對Maven構建項目,Gradle構建的項目未測試,自行嘗試。web

Maven環境配置

爲了可使用Maven命令運行Sonar來分析項目代碼,首先須要將Maven的bin目錄添加到環變量內,以下:數據庫

Maven 環境變量

配置完成後,在命令行窗口使用命令 mvn -v 查看Maven版本等信息,驗證環境變量配置完成windows

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:sonarjsp

Maven Sonar代碼掃描檢測

首次進行代碼檢測掃描時,會下載SonarQube Scanner相關jar包,相似下圖:ide

enter description here

掃描完成後,會看到 BUILD SUCCESS 的提示,到此代碼的檢測掃描完成。

Maven Sonar掃描檢測完成


IDEA內經過Maven執行SonarQube Scanner分析

下面介紹,在上步操做完成的基礎上,怎麼在IDEA開發工具內使用使用SonarQube Scanner進行代碼檢測分析。

首先IDEA打開須要檢測分析的Maven項目,在 Run/Debug Configurations 中,添加一個Maven的運行配置,具體配置以下:

IDEA 打開運行配置

IDEA 添加Maven配置

IDEA Maven配置


配置完成後,選擇此運行方式,點擊運行,控制檯能夠看到相似上步中命令行窗口的輸出內容,等待出現 BUILD SUCCES 的提示字樣後,表示代碼的檢測分析完成,此時能夠在SonarQube服務內查看分析結果。此處僅測試IDEA環境,Eclipse等其餘IDE開發工具自行測試。


SonarQube Scanner配置

前面說了Maven使用SonarQube Scanner完成對Maven代碼的檢測分析,下面記錄直接下載的SonarQube Scanner配置及使用。

SonarQube Scanner下載

能夠在此處下載支持各類環境的SonarQube Scanner,根據本身須要進行選擇便可。在SonarQube官網下載對應系統版本的SonarQube Scanner cli,該版本支持命令行模式。

SonarQube Scanner CLI 下載

下載完成後,任意目錄下解壓,目錄結構大體以下,目錄做用相似SonarQube

SonarQube Scanner CLI 目錄結構


SonarQube Scanner配置

  • 配置環境變量(爲了能夠全局使用SonarQube Scanner)

    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 進行安裝

enter description here

等待下載安裝完成後,重啓的IDEA中便可完成安裝。

安裝完成重啓IDEA後,會出現以下提示,此時須要對SonarLint插件進行配置

IDEA SonarLint未配置提醒

安裝提示,點擊 SonarLint project configuration 進行SonarLint 項目的配置

IDEA SonarLint關閉遠程服務

或在設置中進行配置

IDEA SonarLint關閉遠程服務綁定

此處關閉遠端SonarQube Server的綁定,即便用本地SentLint插件默認的代碼檢測規則。這樣就能夠在本地環境下使用默認規則進行代碼檢測分析,能夠點擊菜單項 Analyze ,找到 Aanlyze all files with SonarLint 的子菜單項

IDEA 代碼分析菜單項

嘗試點擊此項,來檢測分析當前項目的全部文件

IDEA SonarLint檢測分析確認

IDEA SonarLint代碼分析檢測

單個文件的檢測,能夠在想檢測文件右鍵選擇 SonarLint 進行檢測,具體操做此處不贅述。


SonarLint插件配置

SonarQube能夠針對項目進行檢測規則等設置,要讓IDEA中SonarLint插件同步使用SonarQube服務中更新的規則,則須要以下配置

  • 配置SonarQube Server

    IDEA SonarLint配置服務

    支持兩種登錄驗證方式,此處使用本地SonarQube服務,則使用帳號密碼登錄(遠端項目,可使用Token驗證)

    IDEA SonarLint配置服務

    IDEA SonarLint配置服務

  • 綁定配置SonarQube服務內的項目,用於同步檢測規則

    IDEA SonarLint綁定遠端項目 注意:SonarQube沒有服務時,此處沒法配置,能夠經過SonarQube Scanner或Maven來進行項目代碼的檢測分析,實現項目的添加。 配置完成後,回到服務配置界面,點擊更新規則,便可獲取SonarQube服務上針對該項目配置的檢測規則。

最後,SonarQube的Token,能夠在用戶設置裏進行增刪

SonarQube Token生成


SonarQube服務內查看分析結果

完成代碼的分析檢測後,能夠在瀏覽器訪問SonarQube服務地址,此處爲本地搭建服務,則訪問地址 http:\\localhost:9000

SonarQube 分析結果

能夠在Sonar服務管理頁面內看到新掃描的Maven項目的分析報告,此時根據須要查看對應內容,再也不贅述。


SonarQube Scanner異常問題記錄

SonarQube Scanner執行 sonar-scanner 命令時,出現錯誤時,能夠經過執行 sonar-scanner -X 來輸出詳細錯誤日誌,方便問題的排查。

異常 AnalysisException: Please provide compiled classes of your project with sonar.java.binaries property

該問題緣由見官方文檔

SonarQube Java插件和字節碼

大致意思,自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包下載地址

    SonarJava各版本下載

    下載完成後,替換 ..\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包後,重啓服務,如出現下圖提示狀況

SonarJava jar包版本替換後出現的異常

且運行 sonar-scanner 命令出現SonarQube服務(本文已經將SonarQube服務配置爲系統服務)中止的狀況,在嘗試清理 c:\user\[你當前登錄計算機的用戶名]\.sonar 下的文件所有刪除,而後重啓服務,依舊出現上文提示,且服務過一段時間也會中止運行。具體緣由暫不明確,初步認爲是插件版本問題,不知是否還有仍是其餘問題,未作更多版本測試,本文暫不推薦第三種方法處理,如遇到此狀況,且知道解決方案的但願告知,謝謝。

相關文章
相關標籤/搜索