Sonar入門學習

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

 

1Sonar介紹mysql

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

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

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

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

 

2安裝、配置Sonar編程

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

 

Sonar有兩種啓動方式:瀏覽器

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

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

相關文章
相關標籤/搜索