|
1. 獲取Openfire 3.5.1源代碼 官方主頁(yè):http://www./ (1)從官方網(wǎng)站上直接下載官方發(fā)布版本的源代碼Openfire_3_5_1.zip源代碼壓縮包; 但是,2008年4月24官方發(fā)布的源代碼中使用了import testng.xxx語(yǔ)句,所以額外需要下載并導(dǎo)入testng-5.8-jdk15.jar類(lèi)庫(kù)。否則會(huì)提示錯(cuò)誤信息。 (2)也從官方網(wǎng)站上可以下載最新版(nightly builds),如源代碼壓縮包openfire_src_2008-05-31.zip (3)使用Eclipse的版本控制插件SVN獲?。z出為),具體步驟為: * 在eclipse中,選擇Windows->Open Perspective->Other * 在彈出的窗口中,選擇SVN Repository Exploring, 然后點(diǎn)OK * 在SVN Repositories 視圖中單擊右鍵,選擇 New->Repository Location... *在彈出的New Repository Location對(duì)話(huà)框的輸入U(xiǎn)RL文本框中輸入: http://svn./svn/repos/openfire/trunk 然后,單擊Finish. 你將會(huì)看到頁(yè)面中出現(xiàn)URL地址 * 展開(kāi)URL地址與openfire樹(shù)形結(jié)構(gòu) * 在trunk上點(diǎn)擊右鍵,選擇Check Out(檢出為),即可將源代碼保存到您所指定的目錄下。 * 用Create project from existing source新建工程,注意工程名要用openfire。 4. 創(chuàng)建openfire工程 將openfire_src_3_5_1.zip解壓后,目錄下除了READEME.html、LICENSE.html和changelog.html三個(gè)網(wǎng)頁(yè)文件之外,有下面四個(gè)子目錄。 build目錄:build目錄下收錄的是生成安裝文件(例如:rpm)所要的一些文件,例如JRE等。 resources目錄:resources目錄下收錄的是一些為實(shí)現(xiàn)國(guó)際化(i18n)和本地化的一些編碼文件(例如:英文,中文,法文,德文等)。 documentation目錄:documentation目錄下收錄的是一些關(guān)于Openfire安裝和配置的信息,但最終要的是這里有Openfire開(kāi)發(fā)的Javadoc。 src目錄:這個(gè)src文件夾就是我們想要的Openfire源代碼了,這下面又有許多文件夾,我們只要Java文件夾就好,這里面實(shí)現(xiàn)的Openfire的核心功能,通過(guò)它就可以調(diào)試Openfire。 (1)從現(xiàn)有資源新建項(xiàng)目:File->New->Java Project,在彈出的New Java Project對(duì)話(huà)框中輸入工程名:openfire(注意工程名要用openfire,因?yàn)樵创a默認(rèn)的工程名是openfire),選擇Create project from existing source項(xiàng),單擊Browe,找到當(dāng)前工作空間目錄(\workspace目錄)下存放源代碼的openfire文件夾。(推薦初學(xué)者使用這樣方法,因?yàn)榫幾g、打包、調(diào)試等已經(jīng)做好,可以直接使用) (2)如果您是做二次開(kāi)發(fā),為了定制自己的服務(wù)器端,就可以采用這樣方法: * 新建工程:File->New->Project->Java Project,單擊Next,在Project name文本框中輸入工程名:openfire,單擊Finish * 解壓后得到的openfire_src_3_5_1\src目錄下所有內(nèi)容復(fù)制到新建的工程目錄workspace\openfire下 * 在Package Explorer視圖中,右擊openfire工程,選擇Properties,在彈出的對(duì)話(huà)框中選擇Libraries->Add JARs..,把openfire_src_3_5_1/build/lib目錄下的*.jar類(lèi)庫(kù)全部添加進(jìn)來(lái);選擇Source標(biāo)簽頁(yè),Add Folder..,選中src/java目錄前的復(fù)選框,點(diǎn)擊OK,點(diǎn)擊OK按鈕。 (在Eclipse中將此Java文件夾當(dāng)成源代碼文件夾新建工程,建立新工程后觀(guān)察Openfire所import的包,發(fā)現(xiàn)Openfire用了許多開(kāi)源工具,而這些庫(kù)都在上文提到的Build目錄的lib目錄下,將Openfire用到的庫(kù)都添加到這個(gè)新建工程的Referenced Libraries中?;蛘呷绻@樣一個(gè)一個(gè)添加比較麻煩的話(huà)還有一個(gè)方法就是從你安裝好的Openfire服務(wù)器目錄下的lib目錄中(例如:”D:\Program Files\Openfire\lib”或“/usr/local/openfire/lib”)找到openfire.jar,打開(kāi)后將里面的org/jivesoftware刪除,重新打包成jar并添加到這個(gè)新建工程的Referenced Libraries中,這樣就可以省去了很多類(lèi)似的工作。) 但是這樣新建的openfire項(xiàng)目沒(méi)有打包部署,需要開(kāi)發(fā)者自己完成相應(yīng)的工作。 注意:新建工程之后,可能會(huì)出現(xiàn)一些警告信息,下面對(duì)此予以說(shuō)明: 對(duì)于警告信息,是沒(méi)有關(guān)系的。因?yàn)檫@些警告信息是使用1.5以上版本JDK時(shí)候才出現(xiàn)的,使用JDK1.4是不會(huì)出現(xiàn)這些警告信息的。因?yàn)檫@些代碼中的有些是使用JDK 1.4編寫(xiě)的,而JDK1.4不支持泛型,而JDK 1.5和JDK1.6是支持泛型的。這些警告信息主要是提示將這些非泛型的代碼修改為更加高級(jí)的方法——泛型,所以這些警告信息是不影響代碼結(jié)果的。如果需要修改為泛型也是可以,使用泛型來(lái)處理相關(guān)的集合類(lèi)。 5. 編譯工程 openfire是用ant構(gòu)建的,所以要先設(shè)置使得eclipse中每次編譯都使用內(nèi)置的ant工具,保證編譯的正確執(zhí)行。同時(shí),要在Eclipse中設(shè)置為使用JDK作為JVM,如果使用JRE作為JVM,編譯就會(huì)失敗。 因?yàn)閛penfire在Windows下是使用install4j打包成.exe格式的安裝文件的,所以需要安裝install4j。否則,在使用ant進(jìn)行編譯的時(shí)候,在ant視圖中可能會(huì)出現(xiàn)警告如下信息:taskdef class com.install4j.install4jtask cannot found。這主要是要安裝用來(lái)打包Java應(yīng)用程序的install4j.exe程序,而且將要安裝到其默認(rèn)的安裝路徑C:\Program Files\install4j下。 (1)在eclipse中點(diǎn)擊Window->Show View->Ant,打開(kāi)Ant窗口; (2)在Ant 視圖中,單擊右鍵,在彈出的快捷菜單中選擇Add Buildfiles..; (3)在彈出的對(duì)話(huà)框中,展開(kāi)openfire/build文件夾,選擇build目錄下的build.xml,點(diǎn)擊OK; (4)在Ant視圖中, 展開(kāi)Openfire XMPP Server,雙擊 openfire(default)編譯工程 (5)如果在Console視圖中顯示“BUILD SUCCESSFUL”就表示編譯成功。 7. 創(chuàng)建項(xiàng)目Builder (1)在eclipse的菜單欄中,選擇Run->Open Run Dialog...,在彈出的對(duì)話(huà)框左側(cè)的樹(shù)形結(jié)構(gòu)中選擇Java Application,單擊右鍵,選擇New創(chuàng)建啟動(dòng)配置。 (2) 在Run窗口的Main選項(xiàng)卡中, 修改Name文本框中的值,改成包含要啟動(dòng)的類(lèi)的工程名openfire (3)在Run窗口的Main選項(xiàng)卡中,點(diǎn)Browse按鈕,選擇openfire (4)在Run窗口的Main選項(xiàng)卡中,點(diǎn)Search按鈕,選擇Main class為 org.jivesoftware.openfire.starter.ServerStarter,單擊Apply按鈕。(這是openfire的啟動(dòng)類(lèi)) (5)點(diǎn)擊進(jìn)入Arguments選項(xiàng)卡,在VM arguments文本框中輸入 -DopenfireHome="${workspace_loc:openfire}/target/openfire" 單擊Apply按鈕。這個(gè)是用于eclipse執(zhí)行java命令時(shí)傳遞的參數(shù),這樣openfire程序可以通過(guò)System.getProperty(“openfireHome”)得到openfire的本地位置。 (6)點(diǎn)擊進(jìn)入Classpath選項(xiàng)卡,選中User Entries,這樣Advanced...就處于可用狀態(tài);點(diǎn)擊Advanced...按鈕,在Advanced Options頁(yè)面,選擇Add Folders, 單擊OK。(默認(rèn)情況下,已經(jīng)將工程openfire添加到了這里,而不需要進(jìn)行該項(xiàng)操作,如果有多個(gè)工程的時(shí)候才需要執(zhí)行該項(xiàng)操作。) 選擇openfire\src\i18n, 點(diǎn)OK按鈕將這個(gè)文件夾加入到Classpath選項(xiàng)卡中;同樣的方式把openfire\src\resources目錄下的jar文件夾也加到Classpath選項(xiàng)卡中。 (11)在Common選項(xiàng)卡中,勾選Run復(fù)選框,單擊Apply按鈕。 設(shè)置完畢,這樣以后在run這個(gè)工程的時(shí)候就會(huì)按照正確的配置進(jìn)行了,debug的設(shè)置和run的設(shè)置類(lèi)似,不再多說(shuō)。 8. 運(yùn)行并測(cè)試編譯結(jié)果(openfire服務(wù)器) (1)在Eclipse菜單中,單擊Run->Run(或快捷方式Ctrl+F11),在Console試圖中出現(xiàn)如下所示的信息。 (2)在Web瀏覽器中,輸入http://127.0.0.1:9090/,如果可以出現(xiàn)配置的openfire的頁(yè)面,就表示openfire編譯、運(yùn)行成功。 9. 自己定制openfire服務(wù)器時(shí),在Eclipse對(duì)openfire源代碼進(jìn)行部署 參考網(wǎng)址:http://blog.csdn.net/racingtom/archive/2007/09/27/1803908.aspx openfire的起始類(lèi)為org.jivesoftware.openfire.starter.ServerStarter.java,但是直接運(yùn)行此類(lèi)卻有問(wèn)題,因?yàn)榇祟?lèi)是針對(duì)Openfire安裝包而設(shè)計(jì)的,此類(lèi)的功能是將所用到的JAR文件解壓并將class文件加載到虛擬機(jī)中,而我們要用的卻是源代碼中我們自己編譯好的class文件。所以,我們需要一個(gè)新的啟動(dòng)類(lèi)。 (1)一個(gè)簡(jiǎn)單的實(shí)現(xiàn)方法就是把src/java下的東西復(fù)制到我創(chuàng)建的java project下的src里了,并修改org.jivesoftware.openfire.starter包中ServerStarter.java類(lèi)的源代碼,具體如下(當(dāng)然最好是與ServerStarter.java中的方法一樣,用自定義的ClassLoader來(lái)將XMPPServer.class加載到虛擬機(jī)中) package org.jivesoftware.openfire.starter; import org.jivesoftware.openfire.XMPPServer; public class StandaloneStarter { public static void main(String[] args) { XMPPServer server = new XMPPServer(); } } 這樣程序就可以跑起來(lái)了,最后的問(wèn)題就是配置文件路徑的問(wèn)題。 (2)配置文件路徑 如果文件路徑配置不正確(即Openfire的Home沒(méi)有設(shè)定或者設(shè)置不正確),就可能在運(yùn)行時(shí)出現(xiàn)如下所示的問(wèn)題: Could not locate home java.io.FileNotFoundException...... ERROR 12114 [Jive-ERR] (): java.io.FileNotFoundException: XML properties file does not exist: openfire.xml........ 在XMPPServer類(lèi)中有一個(gè)locateOpenfire方法,這個(gè)方法就是設(shè)置openfireHome屬性。 第1部分的代碼如下: String jiveConfigName = "conf" + File.separator + "openfire.xml"; // First, try to load it openfireHome as a system property. if (openfireHome == null) { String homeProperty = System.getProperty("openfireHome"); try { if (homeProperty != null) { openfireHome = verifyHome(homeProperty, jiveConfigName); } } catch (FileNotFoundException fe) { // Ignore. } } 是在環(huán)境變量設(shè)置了Openfire的Home的情況下尋找openfire.xml文件 你可以更改第二部分的代碼讓Openfire找到Home: // If we still don't have home, let's assume this is standalone // and just look for home in a standard sub-dir location and verify // by looking for the config file if (openfireHome == null) { try { //修改的是下面的代碼,將".."替換為其他路徑了 openfireHome=verifyHome("C:\\Program Files\\Openfire", jiveConfigName).getCanonicalFile(); } catch (FileNotFoundException fe) { // Ignore. } catch (IOException ie) { // Ignore. } } 這部分默認(rèn)是找當(dāng)前文件路徑,你可以修改它為你安裝openfire的路徑,這樣問(wèn)題就可以解決了。 (3)將新建的工程目錄下src/web/WEB-INF/classes/openfire_init.xml導(dǎo)入到eclipse的查詢(xún)路徑里,如將src/web/WEB-INF/classes目錄作為eclipse的源目錄,這樣openfire_init.xml自動(dòng)copy到$openfire_home/classses下面,將openfire_init.xml中的openfireHome設(shè)置為$openfire_home 修改org.jivesoftware.openfire.starter.ServerStarter中的如下兩個(gè)field, private static final String DEFAULT_LIB_DIR = "../lib"; private static final String DEFAULT_ADMIN_LIB_DIR = "../plugins/admin/webapp/WEB-INF/lib"; 改成: private static final String DIR_PREFIX = "$openfire_home"; // to be your own openfire_home private static final String DEFAULT_LIB_DIR = DIR_PREFIX + "lib"; private static final String DEFAULT_ADMIN_LIB_DIR = DIR_PREFIX + "plugins/admin/webapp/WEB-INF/lib"; 現(xiàn)在還不知道這里為什么要這樣做????? 10. 打包openfire編譯結(jié)果 (1)編譯成功之后,可以將openfire打包,以便安裝和使用。 (2)在源碼里面有一個(gè)文件夾里有個(gè)打包的圖標(biāo),雙擊那個(gè)圖標(biāo),install4j就會(huì)讀取你在build.xml文件里的信息、在里面完成做界面等打包工作。 |
|
|
來(lái)自: WindySky > 《OpenFire源碼學(xué)習(xí)》