最近接觸xmpp協(xié)議和openfire服務(wù)器,文檔貌似不怎么豐富,中文資料就更加屈指可數了。這么多中文博客,我可沒(méi)看到一篇像樣的。我們在一個(gè)軟件上做二次開(kāi)發(fā),最關(guān)心的肯定是如何方便地進(jìn)行調試,特別是像openfire這種,如果不知道如何調試的話(huà),絕對不是一般人能忍受開(kāi)發(fā)過(guò)程當中的憤怒的。 好了,該進(jìn)入正題了,本文就整合官網(wǎng)給出的兩個(gè)帖子以及個(gè)人的研究探索,給出完整的開(kāi)發(fā)和調試方法,供初學(xué)者參考。http://community.igniterealtime.org/docs/DOC-1020,此文介紹如何在eclipse中導入openfire并調試,除了導入代碼方式以外,基本上適用,我用的是eclipse3.6,不適用文章中的“Create project from existing source”,點(diǎn)擊File->New->Java project,去掉use default location勾選,browse到你下載的openfire源碼根目錄,確定即可導入。 ![]() 項目導入之后就要build openfire了,菜單window->show view->ant,add build files, 添加build.xml,之后從視圖中選擇目標openfire[default],之后就會(huì )很順利地創(chuàng )建了target和work目錄了。接下來(lái)就是要將openfire跑起來(lái),這個(gè)也相對步驟都一些,不過(guò)剛才給定的地址都已經(jīng)有說(shuō)明,這里就簡(jiǎn)單翻譯一下。點(diǎn)debug->Debug configurations->Java Application,new一個(gè),名字任意,project選剛剛導入的openfire,Main class 搜索ServerStarter(org.jivesoftware.openfire.starter.ServerStarter);轉到Arguments標簽,VM arguments添加一句-DopenfireHome="${workspace_loc:openfire}/target/openfire",黃底的是你剛才導入的project名;轉到Classpath標簽,在User Entries添加幾個(gè)目錄,分別是openfire/src/i18n,openfire/src/resources/jar,openfire/src/test/resources(這個(gè)文件夾官網(wǎng)沒(méi)提到,但是還是需要的): ![]() 轉到common標簽,勾選debug和run,其實(shí)不勾也行,看你自己喜歡咯,然后apply,debug就可以跑起來(lái)了。
當你的openfire跑起來(lái)了,其實(shí)就已經(jīng)搭建好調試環(huán)境了,ServerStarter加個(gè)斷點(diǎn)試試!同時(shí),這說(shuō)明你已經(jīng)具備調試插件的環(huán)境了,接下來(lái)就說(shuō)下插件如何調試,以及如何不使用openfire的默認目錄結構,使用自定義項目和openfire整合調試。 在openfire項目中,我們可以看到已經(jīng)有很多現成的插件,目錄結構很明顯src/plugins/${plugin}。一個(gè)插件的目錄結構也很簡(jiǎn)單: ![]() http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/plugin-dev-guide.html?1312598802 這里也有介紹如何創(chuàng )建你自己的插件,不過(guò)不在本文的介紹范圍,就忽略了,文章也是相當精簡(jiǎn),說(shuō)它夠精簡(jiǎn)好,也可以說(shuō)它不好,因為初學(xué)者只看這些可能覺(jué)得過(guò)于精簡(jiǎn)。 http://community.igniterealtime.org/docs/DOC-1200 這篇文章介紹如何build 插件,字很少,估計也看得懂。這里我也簡(jiǎn)單翻譯一下吧。選Run->External tools->ant build,new一個(gè),名字任意,buildfile選擇上面提到的build.xml,如果你要單獨build某個(gè)插件的話(huà),Arguments需要填寫(xiě)一下,如-Dplugin=xmldebugger,這就告訴ant我只需要build xmldebugger這個(gè)插件,轉到Targets標簽,選擇plugin目標,Apply,run就可以了,當你的插件build好以后,在target目錄和work目錄都有體現了,已經(jīng)可以調試,并且我發(fā)現修改了java文件不需要重啟openfire就可以調試。如果你想build所有plugin的話(huà),就不需要剛才提到的Arguments了,在Targets標簽選擇plugins,就可以一次性build所有plugin,不過(guò)本人不推薦這種做法,因為這樣log啊什么的都多很多,而且使得調試變得麻煩,建議大家只選擇自己需要的插件來(lái)build。 下面就是本文的價(jià)值所在,如果我們不喜歡按照openfire的默認目錄結構來(lái)開(kāi)發(fā)插件,那該怎么辦呢?特別像我這種習慣使用maven2多項目調試的人,更受不了結合那么緊密的目錄結構。我們要使用自定義項目作為openfire插件來(lái)調試,有幾個(gè)主要步驟: 第一就是要創(chuàng )建我們自己的項目,當然最后打包的結果要跟openfire要求的結構一致才能調試,創(chuàng )建項目的過(guò)程這里就不說(shuō)了,如果你使用的是maven2,可以參考一下此插件,能協(xié)助你更容易地build openfire插件哦!
第二就是要在openfire項目中創(chuàng )建我們的plugin目錄,需要的文件在上面的圖也就說(shuō)明了。如果你有自己的servlet的話(huà),就要在web-custom.xml中聲明一下哦,所有插件的servlet最后都由org.jivesoftware.openfire.container.PluginServlet來(lái)管理,呵呵,當你調試你的servlet的時(shí)候就別忘了看看這個(gè)類(lèi)了,不然你會(huì )抓狂的。我們的plugin目錄,建議創(chuàng )建一個(gè)lib目錄,將我們的maven工程依賴(lài)的包都加進(jìn)去,那就不用研究ant和maven2的交互,畢竟我們還是比較推崇敏捷,花太多時(shí)間在這些細節方面就不太好了。 第三,也是最重要的一點(diǎn),我們需要修改一下build.xml文件,來(lái)支持我們的自定義工程,我們修改的東西不多,主要就是讓ant把我們外部工程的源文件編譯好,還有我們依賴(lài)的非java文件,如spring配置文件等,需要copy到目標目錄中的。修改的目標就是plugin,在javac處加入我們的java目錄: ![]() 加入我們的非java的resources: ![]() 第四,用剛才介紹的build plugin方法build你自己的plugin。就是這么簡(jiǎn)單幾步,就可以實(shí)現你的項目和openfire整合調試了。 |
聯(lián)系客服