將 openfire 源碼作為java項目導(dǎo)入eclipse調(diào)試
背景:
- 筆者需要研究下XMPP協(xié)議及openfire源碼,項目需求是構(gòu)建IM系統(tǒng),需要自己定協(xié)議,基于openfire開發(fā)。
- 在將openfire源碼導(dǎo)入eclipse時遇到問題,查看網(wǎng)絡(luò)上別人的經(jīng)驗,并多次嘗試才得以解決。
- 這里分享自己的經(jīng)驗,以方便大家短時間內(nèi)開始調(diào)試openfire,避免不必要的麻煩。
以上經(jīng)驗,大多是基于openfire3.5或3.6的;一些是基于ant構(gòu)建的,麻煩無比;筆者則只有一步用了ant,盡量簡單地解決問題。
- 官方文檔 Openfire SVN + Eclipse 3.3 + Subversive Installation Guide
http://community.igniterealtime.org/docs/DOC-1020
【我覺得看著就挺長挺麻煩的,但是要承認寫文檔的人很幽默,而且很有條理,方法也是很OK的?!?/p>
說明:
- openfire是一個是實現(xiàn)xmpp協(xié)議的開源服務(wù)器端程序,可用來構(gòu)建IM系統(tǒng)及聊天室等應(yīng)用。
- 一般下載openfire分發(fā)包即可部署程序運行;但本文還將下載其源碼,以導(dǎo)入到eclipse做調(diào)試等用。
準備:
- openfire 3.7.0 及其源碼下載: http://www.igniterealtime.org/downloads/index.jsp
- eclipse indigo
- openfire分發(fā)包及源碼是使用ant構(gòu)建的,所以本地開發(fā)環(huán)境最好已經(jīng)安裝ant(可在shell或command下執(zhí)行ant命令)。
步驟:
1、下載openfire_3_7_0.exe(openfire_3_7_0.tar.gz) 及源碼 openfire_src_3_7_0.tar.gz ; 可直接下載,也可svn檢出;
將openfire安裝在常用的程序安裝目錄,確認可正常啟動關(guān)閉即可;
將源碼解壓待用,比如放在 d:\openfire_src\。
2、在打開的eclipse工作區(qū)新建java project,命名叫 openfire;除了默認的源碼src外,再設(shè)置一個默認輸出目錄的classes (在項目上右鍵-屬性-編譯路徑-源碼);同時取消src的源碼目錄設(shè)置(從source列表里remove);
我們將此項目在文件系統(tǒng)的完整路徑記作 $home (即....../workspace/openfire/);
3、把 d:\openfire_src\src 中的所有內(nèi)容COPY到 $home/src 下(在文件系統(tǒng)中進行);
在shell或者command下進入 d:\openfire_src\build\ ,運行ant,看到編譯成功后,將 d:\openfire_src\target\openfire\下的所有內(nèi)容拷貝到 $home/src 覆蓋(重復(fù)的覆蓋,不重復(fù)的繼續(xù)保留);
4、設(shè)置以下4個源碼目錄: $home\src\java, $home\src\i18n, $home\src\resource\java, $home\src\web\WEB-INF\classes ;可選地也可設(shè)置測試代碼 $home\test\java 到源碼目錄;
5、盡管在$home\src下已經(jīng)有了lib目錄,而且有jar存在,但顯然不是所有;因此個人建議忽略此lib目錄,將 d:\openfire_src\build\lib\下的所有jar(含子目錄)作為外部jar添加到項目的classpath;
6、修改 $home\src\web\WEB-INF\classes\openfire_init.xml文件為(用真實內(nèi)容替換$home):
<openfireHome>$home\src</openfireHome>
7、修改ServerStarter類(org.jivesoftware.openfire.starter.ServerStarter)中的常量值:
private static final String DIR_PREFIX = "$home/src"; // 我們新增加的一個BASE路徑常量
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"; // 原有的常量,稍作修改
錯誤排解:
1、 最可能經(jīng)常遇到的錯誤之一就是 ClassNotFound ,此時一般都是因為項目的source啊,classpath啊,jar等沒有設(shè)置正確;
可以先檢查eclipse的markers視圖有無錯誤,以及項目的classes目錄下是否有內(nèi)容生成;
2、也有可能在剛修改完之后報錯,請clean項目,并顯示編譯,然后刷新項目尤其是classes目錄;之后再次嘗試;
后記:
當你看到以下內(nèi)容時,說明基本OK:
Openfire 3.7.0 [Aug 10, 2011 3:32:36 PM]
Admin console listening at http://127.0.0.1:9090
當你訪問以上URL,看到openfire的安裝設(shè)置界面時(http://127.0.0.1:9090/setup/index.jsp),你只需要創(chuàng)建一個數(shù)據(jù)庫然后設(shè)置完成,就可以開始體驗XMPP了,但更重要的是調(diào)試openfire。
祝你好運。