介紹

Sonar是一個用于代碼質量管理的開源平臺,用于管理Java源代碼的質量。通過插件機制,Sonar?可以集成不同的測試工具,代碼分析工具,以及持續集成工具,比如pmd-cpd、checkstyle、findbugs、Jenkins。通過不同的插件對這些結果進行再加工處理,通過量化的方式度量代碼質量的變化,從而可以方便地對不同規模和種類的工程進行代碼質量管理。同時?Sonar?還對大量的持續集成工具提供了接口支持,可以很方便地在持續集成中使用?Sonar。此外,Sonar?的插件還可以對?Java?以外的其他編程語言提供支持,對國際化以及報告文檔化也有良好的支持。

 

SONAR安裝&運行

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

 

運行:解壓后,根據平臺運行bin下不同目錄下的啟動腳本。對于linux x86_64,運行bin/linux-x86-64/sonar.sh。

可用命令:

./sonar.sh { console | start | stop | restart | status | dump }

 

安裝插件:

SONAR中文包:http://docs.codehaus.org/display/SONAR/Chinese+Pack

將插件放置在${SONARHOME}/extensions/plugins下,重啟sonar后生效。注意版本號要匹配。本例中,SonarQube版本為4.4,所以選擇插件版本為1.8的。

 

SONAR + Maven分析代碼質量

1)設置sonar使用的數據庫信息。

本例設置sonar使用mysql數據庫存儲分析數據。保存設置后,執行restart使其生效。

 

${SONARHOME}/conf/sonar.properties:

  1. # Permissions to create tables, indices and triggers must be granted to JDBC user.
  2. # The schema must be created first.
  3. jdbc.username=root
  4. jdbc.password=root
  5. # Comment the following line to deactivate the default embedded database.
  6. #sonar.jdbc.url=jdbc:h2:tcp://localhost:9092/sonar
  7. #—– MySQL 5.x
  8. # Comment the embedded database and uncomment the following line to use MySQL
  9. jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true

 

2)需要在Maven的settings.xml設置sonar信息。

其中<sonar.host.url>http://localhost:9000</sonar.host.url>指明了sonar服務器的地址。所以在執行maven命令的時候,<sonar.host.url>指明的服務器必須已運行起來。

 

${MAVEN_HOME}/conf/settings.xml:

  1. <profiles>
  2. <profile>
  3. <id>sonar</id>
  4. <properties>
  5. <sonar.jdbc.url>jdbc:mysql://192.168.198.128:3306/sonar</sonar.jdbc.url>
  6. <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>
  7. <sonar.jdbc.username>root</sonar.jdbc.username>
  8. <sonar.jdbc.password>root</sonar.jdbc.password>
  9. <sonar.host.url>http://localhost:9000</sonar.host.url> <!– Sonar服務器訪問地址 –>
  10. </properties>
  11. </profile>
  12. </profiles>
  13. <activeProfiles><activeProfile>sonar</activeProfile>
  14. </activeProfiles>

3)執行mvn sonar:sonar命令進行代碼分析。

我們可以在Eclipse中,對一個標準maven工程執行sonar。說明:由于maven對sonar有很好的支持,會自動執行相應的腳本,所以無需在pom中添加sonar說明。

在執行maven進行sonar分析之前,必須確保sonar服務器已經處于運行狀態。本例中sonar服務器運行在localhost:9000上。

 

首先,執行sonar:sonar命令,最后得到輸出如下輸出。如果輸出”BUILD SUCCESS“說明已經構建成功。

然后,我們可以在瀏覽器查看分析結果。

 

查看分析結果

對于使用sonar自帶服務器來說,在瀏覽器訪問:http://sonar_ip:9000,打開sonar結果頁面。可使用admin/admin賬號登錄進入。

1)home頁

下面是home頁,右邊PROJECTS頁面列出了所有的工程。點擊紅色框內的鏈接,可以查看詳細情況。

 

2)工程總面板視圖

Dashboard包含了很多信息,比如程序統計信息、問題統計信息、技術債務、代碼復雜度、單元測試覆蓋度等。

 

3)Hotspots熱點區

在熱點區,可以查看比較主要(hot)的信息。

 

4)問題視圖

點擊左側導航樹的“問題”,打開問題視圖頁。通過點擊問題數,如下紅框所示,可以查看具體問題。

 

點擊問題數后,進入具體問題頁。SonarQube允許管理員對問題進行重新確認,比如可以認為一個打開的問題是誤判的。

 

下面是認為一個問題是誤判后的情況。

 

在問題頁面,可以通過“狀態”搜索問題。下面是搜索“誤判”問題的結果。

 

5)技術債務

這里列出了修復問題所需要的時間,所謂技術債務。出來混總要還的,遺留的問題越多,技術債務越大。

 

6)問題明細

這里列出問題明細,包括問題嚴重級別,對應的問題數量,問題的描述。

 

結合Jenkins

可以將SONAR服務器放置在任意master或者slave節點上,在進行sonar分析時,必須在maven的conf/settings.xml中配置sonar服務器信息。然后就可以在jenkins中進行sonar分析了。

有兩種方法使jenkins與sonar結合:一種就是上面介紹的通過maven(jenkins -maven – sonar),另外一種是直接在jenkins中調用sonar。

 

Comments are closed.