最近在學習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插件的版本,以下:
f.能夠顯式的將sonar綁定到Maven生命週期中,以下:
此時,指定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/