最近研究openfire即時通訊服務(wù)器膘掰,但是過程相當不順利跪另,將源碼部署到idea上拧抖,在網(wǎng)上海量搜索,加群等弄了近3天的時間才弄好免绿,也以此記錄一下過程唧席,和常見的問題,希望這篇文章能讓研究openfire的筒子們少走一些彎路嘲驾,畢竟idea有一點點不是很喜歡openfire淌哟。
環(huán)境說明:windows7+IntelliJ IDEA 2016+openfire 4.0.2+JDK1.8
一、解壓openfire源碼距淫,解壓后的文件夾名稱可根據(jù)個人喜好修改绞绒,我的結(jié)構(gòu)是這樣的,如圖:
二榕暇、使用idea導入源碼
2.1.打開idea,選擇import project
2.2.選擇剛剛的源碼目錄進行導入
2.3.選擇根據(jù)源碼創(chuàng)建項目
2.4.然后一路無腦next,直到完成蓬衡,網(wǎng)上很多人說,需要去掉rayo和monitoring的插件彤枢,不然后面編譯會有問題狰晚,但這其實只是知其然不知其所以然的表現(xiàn),這里不用去掉缴啡,后面我會進行說明壁晒,至此,源碼導入完成业栅,如圖:
三秒咐、開始進行相關(guān)設(shè)置谬晕,和中途遇到的問題說明及解決方法
3.1,首先使用ant在源碼中打開build.xml文件携取,并進行構(gòu)建:
3.2完成以后攒钳,可以點擊過濾按鈕(過濾不需要的ant構(gòu)建),使ant結(jié)構(gòu)更清晰一點:
3.3.然后點擊run
3.4這時可能會出現(xiàn)第一個問題:找不到JDK
3.5解決方法 :打開Project Structure雷滋,默認快捷鍵:Ctrl+Shift+Alt+S
添加JDK不撑,我安裝的是JDK1.8,但是環(huán)境使用1.7晤斩,輸出目錄使用默認的/out目錄,老的項目建議使用1.5-1.7的JDK焕檬,1.8JDK的很多新特性容易導致很多問題,如圖:
配置好后澳泵,再進行ant編譯实愚,即3.3
3.6編譯完成后,進行應(yīng)用程序配置烹俗,說明:openfire雖然是一個web程序爆侣,但本身是其實一個application程序,只是內(nèi)部使用jetty容器來實現(xiàn)的幢妄。
操作如下:
說明:VM Options下配置的openfire源碼下的target目錄兔仰,是源碼經(jīng)過Ant編譯之后才會產(chǎn)生的目錄,如果沒有進行Ant編譯蕉鸳,則不會出現(xiàn)這個目錄
3.7配置完成后乎赴,啟動:
然后,問題來了潮尝,一個一個解決:
第一個問題:
這是由于tinder.jar包沖突導致榕吼,解決方法,刪除rayo插件下的tinder.jar包勉失,位于:src/plugins/rayo/lib中羹蚣,這應(yīng)該就是網(wǎng)上說開始導入時,去掉rayo這個插件的原因乱凿。
刪除后再進行啟動:可能會出現(xiàn)如下錯誤:
這是由于openfire本身沒有帶ant.jar包顽素,導致,而idea也不會像eclipse一樣自動找ant.jar包徒蟆,所以我們需要手動導入胁出,解決方法如下:
ant.jar包,去網(wǎng)上下載一個段审,或直接使用idea自帶的ant.jar包全蝶,如:
將ant.jar放到openfire的lib/ant文件夾中,并引用
順便清理一下tinder.jar的引用
并將openfire引用ant依賴
完成之后,再啟動抑淫,會出現(xiàn)一個空指針異常(這個異常目前還不知道如何解決绷落,但不影響使用,后面有時間再慢慢研究吧)始苇,但是監(jiān)聽程序啟動正常嘱函,于是進行訪問但出現(xiàn)這樣的錯誤:
這也是由于rayo插件下的javax.el-api-2.2.4.jar包沖突引起(PS:好想念maven),刪掉這個包,同時清理依賴:
刪掉之后埂蕊,再啟動,訪問:出現(xiàn)這樣的錯誤:
這是配置文件問題疏唾,解決方法為:
將openfire中的i18n中的所有文件:D:\develop\workspace_idea\openfire\resources\i18n
和admin-sidebar.xml文件:D:\develop\workspace_idea\openfire\src\resources\jar\admin-sidebar.xml
把這些文件全部復(fù)制到這里
然后再進行啟動蓄氧,訪問成功!至此槐脏,源碼部署工作完成喉童,如圖:
最后存在的一個問題,當部署成功之后顿天,啟動依然出現(xiàn)如下 空指針異常堂氯,這個異常目前也沒造成什么影響,但是具體產(chǎn)生的原因和解決方法牌废,希望有研究openfire的大神們能指導一下
以上部署過程咽白,個人親測通過,但不保證所有人都可以部署成功鸟缕,畢竟不同的環(huán)境晶框,結(jié)果可能大不同!
希望這篇文章能幫助到大家