最近研究openfire即时通讯服务器,但是过程相当不顺利,将源码部署到idea上,在网上海量搜索,加群等弄了近3天的时间才弄好,也以此记录一下过程,和常见的问题,希望这篇文章能让研究openfire的筒子们少走一些弯路,毕竟idea有一点点不是很喜欢openfire。
环境说明:windows7+IntelliJ IDEA 2016+openfire 4.0.2+JDK1.8
一、解压openfire源码,解压后的文件夹名称可根据个人喜好修改,我的结构是这样的,如图:
image二、使用idea导入源码
2.1.打开idea,选择import project
image2.2.选择刚刚的源码目录进行导入
image2.3.选择根据源码创建项目
image2.4.然后一路无脑next,直到完成,网上很多人说,需要去掉rayo和monitoring的插件,不然后面编译会有问题,但这其实只是知其然不知其所以然的表现,这里不用去掉,后面我会进行说明,至此,源码导入完成,如图:
image三、开始进行相关设置,和中途遇到的问题说明及解决方法
3.1,首先使用ant在源码中打开build.xml文件,并进行构建:
image3.2完成以后,可以点击过滤按钮(过滤不需要的ant构建),使ant结构更清晰一点:
image3.3.然后点击run
image3.4这时可能会出现第一个问题:找不到JDK
image3.5解决方法 :打开Project Structure,默认快捷键:Ctrl+Shift+Alt+S
添加JDK,我安装的是JDK1.8,但是环境使用1.7,输出目录使用默认的/out目录,老的项目建议使用1.5-1.7的JDK,1.8JDK的很多新特性容易导致很多问题,如图:
image配置好后,再进行ant编译,即3.3
3.6编译完成后,进行应用程序配置,说明:openfire虽然是一个web程序,但本身是其实一个application程序,只是内部使用jetty容器来实现的。
操作如下:
image image image说明:VM Options下配置的openfire源码下的target目录,是源码经过Ant编译之后才会产生的目录,如果没有进行Ant编译,则不会出现这个目录
3.7配置完成后,启动:
image然后,问题来了,一个一个解决:
第一个问题:
image这是由于tinder.jar包冲突导致,解决方法,删除rayo插件下的tinder.jar包,位于:src/plugins/rayo/lib中,这应该就是网上说开始导入时,去掉rayo这个插件的原因。
image删除后再进行启动:可能会出现如下错误:
image这是由于openfire本身没有带ant.jar包,导致,而idea也不会像eclipse一样自动找ant.jar包,所以我们需要手动导入,解决方法如下:
ant.jar包,去网上下载一个,或直接使用idea自带的ant.jar包,如:
image将ant.jar放到openfire的lib/ant文件夹中,并引用
image image顺便清理一下tinder.jar的引用
image并将openfire引用ant依赖
image image完成之后,再启动,会出现一个空指针异常(这个异常目前还不知道如何解决,但不影响使用,后面有时间再慢慢研究吧),但是监听程序启动正常,于是进行访问但出现这样的错误:
image这也是由于rayo插件下的javax.el-api-2.2.4.jar包冲突引起(PS:好想念maven),删掉这个包,同时清理依赖:
image image删掉之后,再启动,访问:出现这样的错误:
image这是配置文件问题,解决方法为:
将openfire中的i18n中的所有文件:D:\develop\workspace_idea\openfire\resources\i18n
和admin-sidebar.xml文件:D:\develop\workspace_idea\openfire\src\resources\jar\admin-sidebar.xml
把这些文件全部复制到这里
image然后再进行启动,访问成功!至此,源码部署工作完成,如图:
image最后存在的一个问题,当部署成功之后,启动依然出现如下 空指针异常,这个异常目前也没造成什么影响,但是具体产生的原因和解决方法,希望有研究openfire的大神们能指导一下
image以上部署过程,个人亲测通过,但不保证所有人都可以部署成功,毕竟不同的环境,结果可能大不同!
希望这篇文章能帮助到大家
网友评论