sonar tomacat配置

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

 

一、Sonar介紹mysql

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

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

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

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

 

二、安裝、配置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」   

 

三、數據庫安裝配置及數據庫鏈接配置

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的數據庫,賬號和密碼分別爲sonar、sonar的用戶(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」  

 

五、使用Sonar

a. 運行Sonar服務器;

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

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

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

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

 

[xml]  view plain  copy
 
  1. <project>  
  2.   <build>  
  3.    <plugins>  
  4.      <plugin>  
  5.        <groupId>org.codehaus.sonar</groupId>  
  6.        <artifactId>sonar-maven-plugin</artifactId>  
  7.        <version>3.5.1</version>  
  8.      </plugin>  
  9.    </plugins>  
  10.    </build>  
  11. </project>  

 

f.能夠顯式的將sonar綁定到Maven生命週期中,以下:

[xml]  view plain  copy
 
  1. <plugin>  
  2.     <groupId>org.codehaus.sonar</groupId>  
  3.     <artifactId>sonar-maven-plugin</artifactId>  
  4.     <version>3.5.1</version>  
  5.     <executions>  
  6.         <execution>  
  7.             <id>sonar</id>  
  8.             <phase>site</phase>  
  9.             <goals>  
  10.                 <goal>sonar</goal>  
  11.             </goals>  
  12.         </execution>  
  13.     </executions>  
  14. </plugin>  

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

 

  

六、Hudson集成

Sonar還能夠經過插件與Hudson進行集成,在每次構建結束後觸發Sonar.

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

而後,在系統設置裏,增長一個Sonar的Installation;

最後,在項目的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

相關文章
相關標籤/搜索