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