【轉】Sonar的安裝以及使用

【劃重點!!這是一篇轉載博客,轉自:https://www.cnblogs.com/qlqwjy/p/10551283.html

SonarQube是管理代碼質量一個開放平臺,可以快速的定位代碼中潛在的或者明顯的錯誤,下面將會介紹一下這個工具的安裝、配置以及使用。

1. 簡介

1.  sonar是什麼

  Sonar是一個用於代碼質量管理的開源平臺,用於管理代碼的質量,通過插件形式可以支持二十幾種語言的代碼質量檢測,通過多個維度的檢查了快速定位代碼中潛在的或者明顯的錯誤。

2.  SonarQube與Sonar

  SonarQube是sonar的服務端,相當於一個web服務器中的tomcat,用來發布應用,在線瀏覽分析等。

2.安裝

1.下載sonarqubexxx.zip並且解壓即可:

  下載地址:http://www.sonarqube.org/downloads/

下載完成後解壓後點擊StartSonar.bat啓動即可,如下:

 

 http訪問9000端口出現下面則證明安裝成功。 (如果需要修改端口等信息修改sonarqube-6.7.6\conf\sonar.properties即可)

2.配置數據庫

1. 在mysql數據庫新建一個庫的名稱爲sonar

2.  修改sonar/conf/sonar.properties的db信息:

  不用放置驅動包,也不用創建表。

sonar.jdbc.username=root
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

 3.重啓sonarQube會自動建表。

 

4.接下來訪問9000端口然後進行登錄即可。默認創建的用戶名和密碼都是admin。可以在system選項卡看到系統信息

 3.使用

 1.下載sonar-scanner:(這個工具是對源碼進行掃描,並將結果保存到數據庫以便用上面的sonarqube進行分析)

  下載地址:    https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner

 2.配置mysql信息

   \sonar\sonar-scanner-3.3.0.1492-windows\conf\sonar-scanner.properties文件

複製代碼

#Configure here general information about the environment, such as SonarQube server connection details for example
#No information about specific project should appear here

#----- Default SonarQube server
#sonar.host.url=http://localhost:9000

#----- Default source code encoding
#sonar.sourceEncoding=UTF-8

sonar.jdbc.username=root
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

複製代碼

3.配置環境變量 並測試

   path中增加如下變量:   E:\sonar\sonar-scanner-3.3.0.1492-windows\bin

複製代碼

C:\Users\Administrator>sonar-scanner --version
INFO: Scanner configuration file: E:\sonar\sonar-scanner-3.3.0.1492-windows\bin\..\conf\sonar-scanner.properties
INFO: Project root configuration file: NONE
INFO: SonarQube Scanner 3.3.0.1492
INFO: Java 1.8.0_121 Oracle Corporation (64-bit)
INFO: Windows 10 10.0 amd64

複製代碼

 4.打開要進行代碼分析的項目根目錄,新建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
 
# Encoding of the source code. Default is default system encoding
#sonar.sourceEncoding=UTF-8

複製代碼

 解釋:projectName是項目名字,sources是源文件所在的目錄;sonar.java.binaries是項目編譯後的class文件的目錄。

5.設置成功後,啓動sonarqube服務

6.開始分析:

  cmd窗口進入到項目的根路徑,執行下面命令即可:

E:\xiangmu\springboot-ssm>sonar-scanner

如下:

7.訪問9000端口查看分析結果

項目分析概要圖:

 

 

 查看存在的bug:

 

8.選擇一個bug進行查看(可以看到與git也進行了集成,可以看到編寫人與時間以及bug的原因)

 

 

  此工具還分析出一些異常信息的記錄等,如下:

9.  解決下面的bug

代碼修改爲下面即可:(上面邏輯應該是沒有錯,只是在多次改變引用的情況下被檢測爲bug)

複製代碼

    @Override
    public Token addOrUpdateToken(String username) {
        // 1.判斷是否有對應的token,如果有的話更新時間,沒有的話就創建token並且返回
        Token token = findTokenByUsername(username);
        // 1.1創建token並返回
        if (token == null) {
            return generateAndSaveTokenByUserName(username);
        }

        // 1.2根據失效時間更新且返回token
        return updateTokenByTokenLoseTime(token);
    }

複製代碼

10.解決異常處理的bug

代碼修改爲:

複製代碼

    @Scheduled(fixedRate = 10000)
    public void cron() {
        try {
            Thread.sleep(2000);
            System.out.println("spring anno task execute times " + count++);
        } catch (InterruptedException e) {
            System.err.println("InterruptedException " + e);
            Thread.currentThread().interrupt();
        }
    }

複製代碼

 

11.程序中故意寫一個空指針異常看是否可以檢測出來 

        String string = null;
        if(string.equals("xxx")){
            System.out.println("xxx");
        }

結果:

 

 更多的學習參考官網:

  https://docs.sonarqube.org/display/SCAN/Advanced+SonarQube+Scanner+Usages

    https://www.sonarqube.org/

補充:sonarqube漢化

 

  

  • 再次通過9000端口訪問發現變爲中文版:

 

4. 註冊爲windows服務 

  sonar自帶的有註冊與刪除服務的方法,採用wrapper註冊爲服務,如下已管理員方式運行InstallNTService.bat即可:

 

  註冊爲服務之後我這裏啓動服務報錯不能正常啓動服務,到  %sonar%/logs/sonar.log中查看原因如下:

Launching a JVM...
Unable to execute Java command.  系統找不到指定的文件。 (0x2)

 

解決辦法:修改%sonar%/conf/wrapper.conf中java的路徑爲絕對路徑

 

補充:sonar-scanner的配置也可以進行分模塊配置,比如我想檢測一個web項目的所有文件(包括Java、JSP、JS、Html、XML),如下:

0. 如果檢測html和JSP需要下載sonar-html-plugin-3.1.0.1615.jar插件置於sonarqube-6.7.6\extensions\plugins目錄下,而且html的language爲web,jsp的language爲jsp

1.項目結構如下:

2.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=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
#ignore files and directory
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

複製代碼

3.測試結果從web上訪問如下:

 

補充:sonar集成阿里的p3c規則

1.下載插件 

  到https://github.com/mrprince/sonar-p3c-pmd/releases 下載jar包即可

2.jar放在sonarqube-6.7.6\extensions\plugins目錄下

3.重啓sonarqube

4.到網頁規則搜索p3c,如下

5.  創建規則,不用選文件,如下:

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

7.查看p3c激活的規則 (48條)

 

8.   到質量配置設爲java默認規則即可

9.簡單的測試

  sonar自帶的與p3c規則最明顯的區別是:

     str.equals("xxx")在p3c會被檢測,在自帶規則不會被檢測到。

     System.out.print... 會被自帶規則檢測到,p3c不會檢測到。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章