Sonar入門學習


最近學習Sonar,配置了好幾天,才搭建起來環境,為自己的學習能力感到汗顏,趕緊在此記錄一下,所謂好記性不如爛筆頭。

 

1Sonar介紹

Sonar是一個用於代碼質量管理的開源平台,用於管理Java源代碼的質量。

通過插件機制,Sonar 可以集成不同的測試工具,代碼分析工具,以及持續集成工具通過不同的插件對這些結果進行再加工處理,通過量化的方式度量代碼質量的變化,從而可以方便地對不同規模和種類的工程進行代碼質量管理。

同時 Sonar 還對大量的持續集成工具提供了接口支持,可以很方便地在持續集成中使用 Sonar

此外,Sonar 的插件還可以對 Java 以外的其他編程語言提供支持,對國際化以及報告文檔化也有良好的支持。

 

2安裝、配置Sonar

Sonar的運行需要 JDK 1.5+ , Maven 2.0.9+  的支持,因此需要系統中安裝以上兩個軟件;從 http://www.sonarqube.org/downloads/ 下載sonar(最新版本3.5.1)zip文件,解壓到任意目錄,即完成安裝.

 

Sonar有兩種啟動方式:

第一種:直接啟動${SONAR_HOME}/bin下對應系統的腳本即可.

windows環境,啟動${SONAR_HOME}/bin/windows-x86-32/StartSonar.bat在瀏覽器中訪問http://localhost:9000/,界面如下:

由於Sonar自帶了Jetty6 的應用服務器環境,所以不需要額外的配置即可使用.

Sonar默認的端口是9000,默認的上下文路徑是/,默認的網絡接口是0.0.0.0;這些參數都可以在${SONAR_HOME}/conf/sonar.properties修改.

默認的管理員帳號和密碼為:admin/admin.


 

第二種:作為Web項目,部署到Tomcat應用服務器中.

步驟如下(tomcat為例):

a. 編輯conf/sonar.properties還原成標准格式(就是不修改端口之類);確保部署到應用服務器時conf/wrapper.conf未被使用過;
b. ${SONAR_HOME}/war目錄下執行build-war.bat腳本;將生成的sonar.war部署到應用服務器;
c. 啟動Tomcat, 通過 http://localhost:8080/sonar 訪問.

為了避免內存溢出,增加內存堆棧的大小:Tomcat啟動前設置CATALINA_OPTS環境變量:

CATALINA_OPTS=”-Xms1024m -Xmx1024m -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true -XX:MaxPermSize=256m”   

 

3、數據庫安裝配置及數據庫連接配置

Sonar需要一個數據庫來存儲結果,Apache Derby Sonar自帶並且默認安裝使用的數據庫,它能很好的用於Sonar的演示.但在實際項目中推薦使用性能更好更強大的數據庫.

Sonar對如下數據庫提供支持:MySQL 5.x, Oracle 10g XE, Postgresql, MS SqlServer 2005 .(MySQL為例進行介紹):

 

a. 編輯${SONAR_HOME}/conf/sonar.properties配置數據庫:

 

b. 配置DB驅動包.

如果使用Oracle數據庫,必須手動復制驅動類到${SONAR_HOME}/extensions/jdbc-driver/oracle/目錄下;其它支持的數據庫默認提供了驅動.

 

經過以上步驟,重啟Sonar服務(使用Tomat等外置服務器者,需要重新打war包,重啟服務器);會自動創建名為sonar的數據庫,帳號和密碼分別為sonarsonar的用戶(sonar默認值);通過瀏覽器訪問sonar服務即可.

:經測試,發現如果不先手動創建sonar用戶時,sonar不能正確的執行創建(這與數據庫本身的用戶權限有關,默認帳號不對,或者權限不夠,自然不能創建數據庫了)!在此建議先手動創建數據庫(sonar)和用戶(sonar),同時給sonar用戶授權.語句如下:

CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE USER 'sonar' IDENTIFIED BY 'sonar';

GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';

GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';

FLUSH PRIVILEGES;

 

http://docs.codehaus.org/display/SONAR/Analysis+Parameters 列舉了一些常用的配置及默認值.

 

啟動過程中如有報錯,可參考我的另一篇博客(http://allen-j-will.iteye.com/blog/1897180

 

4、集成Maven

Sonar是通過Maven2 插件來分析源代碼並把結果注入到數據庫.因此需要在Maven的配置里設置數據庫的屬性.

修改${MAVEN_HOME}/conf/settings.xml文件或者 ~/.m2/settings.xml文件,添加如下 profile:

<profile>

<id>sonar</id>

<properties>

    <sonar.jdbc.url>jdbc:mysql://localhost:3306/sonar</sonar.jdbc.url>

    <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>

    <sonar.jdbc.username>sonar</sonar.jdbc.username>

    <sonar.jdbc.password>sonar</sonar.jdbc.password>

    <sonar.host.url>http://localhost:8080/sonar</sonar.host.url> <!-- Sonar服務器訪問地址 -->

</properties>

</profile>

<activeProfiles>

  <activeProfile>nexus</activeProfile>

  <activeProfile>sonar</activeProfile>

</activeProfiles>

 

: 網上參考的資料中,對於 <sonar.host.url> 屬性,僅配置到端口,本人在本地測試,發現始終不行,這應該和sonar的啟動方式有關;

如果單獨啟動sonar服務,以上配置應該沒問題(未測試);若將sonar部署到服務器中時,<sonar.host.url>屬性需要配置到上下文環境才行.這點特別容易遺漏!!!

同樣,為了避免內存溢出,推薦增加內存堆棧的大小。設置MAVEN_OPTS環境變量:

set MAVEN_OPTS=”-Xmx512m -XX:MaxPermSize=256m”  

 

5、使用Sonar

a. 運行Sonar服務器;

b. 通過 mvn sonar:sonar 將代碼注入到Sonar中進行分析處理,並將處理結果XML的形式保存在數據庫中;

c. 通過瀏覽器訪問,顯示分析結果;

d. 持續運行Maven構建,會迭代顯示分析結果;

e. 可以顯式指定sonar插件的版本,如下:

 

<project>
  <build>
   <plugins>
     <plugin>
       <groupId>org.codehaus.sonar</groupId>
       <artifactId>sonar-maven-plugin</artifactId>
       <version>3.5.1</version>
     </plugin>
   </plugins>
   </build>
</project>

 

f.可以顯式的將sonar綁定到Maven生命周期中,如下:

<plugin>
	<groupId>org.codehaus.sonar</groupId>
	<artifactId>sonar-maven-plugin</artifactId>
	<version>3.5.1</version>
	<executions>
		<execution>
			<id>sonar</id>
			<phase>site</phase>
			<goals>
				<goal>sonar</goal>
			</goals>
		</execution>
	</executions>
</plugin>

此時,指定Maven的site聲明周期時,則會自動調用sonar.sonar 命令.
 

 

  

6Hudson集成

Sonar還可以通過插件與Hudson進行集成,在每次構建結束后觸發Sonar.

首先,應該在Hudson的插件管理中添加Hudson Sonar Plugin;

然后,在系統設置里,增加一個SonarInstallation;

最后,在項目的Post-build actions,勾選Sonar.

在項目構建完成后,會自動執行Sonar的任務.

不過Hudson集成中運行Sonar任務,可能需要參考Sonar的文檔對Maven配置進行相應修改.

 

 

 

本文參考了如下文章,在此表示感謝.

http://www.ibm.com/developerworks/cn/java/j-lo-sonar/

http://pengwei841221.iteye.com/blog/940428

http://digitalsonic.iteye.com/blog/695304


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM