将openfire源码部署到IDEA中

最近研究openfire即时通讯服务器,但是过程相当不顺利,将源码部署到idea上,在网上海量搜索,加群等弄了近3天的时间才弄好,也以此记录一下过程,和常见的问题,希望这篇文章能让研究openfire的筒子们少走一些弯路,毕竟idea有一点点不是很喜欢openfire。

环境说明:windows7+IntelliJ IDEA 2016+openfire 4.0.2+JDK1.8

一、解压openfire源码,解压后的文件夹名称可根据个人喜好修改,我的结构是这样的,如图:

二、使用idea导入源码

2.1.打开idea,选择import project

2.2.选择刚刚的源码目录进行导入

2.3.选择根据源码创建项目

2.4.然后一路无脑next,直到完成,网上很多人说,需要去掉rayo和monitoring的插件,不然后面编译会有问题,但这其实只是知其然不知其所以然的表现,这里不用去掉,后面我会进行说明,至此,源码导入完成,如图:

三、开始进行相关设置,和中途遇到的问题说明及解决方法

3.1,首先使用ant在源码中打开build.xml文件,并进行构建:

3.2完成以后,可以点击过滤按钮(过滤不需要的ant构建),使ant结构更清晰一点:

3.3.然后点击run

3.4这时可能会出现第一个问题:找不到JDK

3.5解决方法 :打开Project Structure,默认快捷键:Ctrl+Shift+Alt+S

添加JDK,我安装的是JDK1.8,但是环境使用1.7,输出目录使用默认的/out目录,老的项目建议使用1.5-1.7的JDK,1.8JDK的很多新特性容易导致很多问题,如图:

配置好后,再进行ant编译,即3.3

3.6编译完成后,进行应用程序配置,说明:openfire虽然是一个web程序,但本身是其实一个application程序,只是内部使用jetty容器来实现的。

操作如下:

说明:VM Options下配置的openfire源码下的target目录,是源码经过Ant编译之后才会产生的目录,如果没有进行Ant编译,则不会出现这个目录

3.7配置完成后,启动:

然后,问题来了,一个一个解决:

第一个问题:

这是由于tinder.jar包冲突导致,解决方法,删除rayo插件下的tinder.jar包,位于:src/plugins/rayo/lib中,这应该就是网上说开始导入时,去掉rayo这个插件的原因。

删除后再进行启动:可能会出现如下错误:

这是由于openfire本身没有带ant.jar包,导致,而idea也不会像eclipse一样自动找ant.jar包,所以我们需要手动导入,解决方法如下:

ant.jar包,去网上下载一个,或直接使用idea自带的ant.jar包,如:

将ant.jar放到openfire的lib/ant文件夹中,并引用

顺便清理一下tinder.jar的引用

并将openfire引用ant依赖

完成之后,再启动,会出现一个空指针异常(这个异常目前还不知道如何解决,但不影响使用,后面有时间再慢慢研究吧),但是监听程序启动正常,于是进行访问但出现这样的错误:

这也是由于rayo插件下的javax.el-api-2.2.4.jar包冲突引起(PS:好想念maven),删掉这个包,同时清理依赖:

删掉之后,再启动,访问:出现这样的错误:

这是配置文件问题,解决方法为:

将openfire中的i18n中的所有文件:D:\develop\workspace_idea\openfire\resources\i18n

和admin-sidebar.xml文件:D:\develop\workspace_idea\openfire\src\resources\jar\admin-sidebar.xml

把这些文件全部复制到这里

然后再进行启动,访问成功!至此,源码部署工作完成,如图:

最后存在的一个问题,当部署成功之后,启动依然出现如下 空指针异常,这个异常目前也没造成什么影响,但是具体产生的原因和解决方法,希望有研究openfire的大神们能指导一下

以上部署过程,个人亲测通过,但不保证所有人都可以部署成功,毕竟不同的环境,结果可能大不同!

希望这篇文章能帮助到大家

时间: 2024-08-26 01:12:56

将openfire源码部署到IDEA中的相关文章

kettle源码部署

一 kettle源码部署概述 1.从git上选择合适的版本,并down下来: 2.创建一个java项目,建立core,dbdialog,engine,ui,plugins文件夹,和一个lib文件夹: 3.将kettle源码中上述五个文件夹中的src下的代码拷贝到我们创建的java项目的五个文件夹下: 4.将发行版kettle工具免安装包的lib,libswt,launcher,simple-jndi 四个文件夹拷贝至java项目根目录,并系统的位数选择libswt.jar  add to bui

JForum 2.19源码部署到eclipse

前两天在研究免费论坛,通过oschina和相关的文档查阅,最终选择了jforum,首先他是java写的,其次方便二次开发,而且有些论坛的源码都已经不在维护了,jforum最近几个月还是有更新的,但是从官网下载了zip版本和源码,zip版本部署到web容器中是可以正常运行的,并且配置成功(本人使用的mysql5.6+tomcat7)配置过程中遇到问题如下: 1.脚本错误,首先在脚本中事务的方式,TYPE应该改成ENGINE,其次通过和oracle脚本的对比发现有的脚本少字段,具体的修改结果见附件

LAMP --Apache的源码部署安装

一.Apache理论部分1.LAMP-Linux+Apache+Mysql+Php 共同组成了一个强大的Web应用程序平台,也是最强大的网站解决方案.Apache是主流的http服务软件.2.Apache的特点:1).功能强大.配置简单.速度快.应用广泛.稳定可靠.可以做代理服务器或者做负载均衡器.2).源于NCSA httpd服务3.Apache的应用场景(1).使用Apache运行静态HTML网页及图片.(2).使用Apache结合PHP引擎运行PHP(3).使用Apache做代理负载均衡

storm源码之理解Storm中Worker、Executor、Task关系【转】

[原]storm源码之理解Storm中Worker.Executor.Task关系 Storm在集群上运行一个Topology时,主要通过以下3个实体来完成Topology的执行工作:1. Worker(进程)2. Executor(线程)3. Task 下图简要描述了这3者之间的关系:                                                    1个worker进程执行的是1个topology的子集(注:不会出现1个worker为多个topology服

安卓图表引擎AChartEngine(四) - 源码示例 嵌入Acitivity中的折线图

前面几篇博客中都是调用ChartFactory.get***Intent()方法,本节讲的内容调用ChartFactory.get***View()方法,这个方法调用的结果可以嵌入到任何一个Activity中,作为Activity的一部分. XYChartBuilder.java(源码分析见注释) [java] view plaincopy package org.achartengine.chartdemo.demo.chart; import java.io.File; import jav

Live555源码分析[2]:RTSPServer中的用户认证

http://blog.csdn.net/njzhujinhua @20140601 说到鉴权,这是我多年来工作中的一部分,但这里rtsp中的认证简单多了,只是最基本的digest鉴权的策略. 在Live555的实现中, 用户信息由如下类维护,其提供增删查的接口.realm默认值为"LIVE555 Streaming Media" class UserAuthenticationDatabase { public: UserAuthenticationDatabase(char con

lnmp 源码部署------2

安装php扩展软件 #哈稀函数库 [[email protected] ~ ]# tar -zxvf mhash-0.9.9.9.tar.gz [[email protected] mhash-0.9.9.9]# cd mhash-0.9.9.9 [[email protected] mhash-0.9.9.9]# ./configure [[email protected] mhash-0.9.9.9]# make [[email protected] mhash-0.9.9.9]# make

java源码部署

环境:nginx+tomcat部署方式:源码部署源码目录 /chroot2/test/schedule 目录下面就是所有源码了tomcat 位置: /usr/local/tomcat/apache-tomcat-scheduleweb-test 主要配置文件server.xml <Host name="localhost" appBase="/chroot2/test/schedule" deployOnStartup ="false" a

boost.asio源码剖析(四) ---- asio中的泛型概念(concepts)

* Protocol(通信协议) Protocol,是asio在网络编程方面最重要的一个concept.在第一章中的levelX类图中可以看到,所有提供网络相关功能的服务和I/O对象都需要Protocol来确定一些细节. Protocol的约束摘要如下: 1 class protocol 2 { 3 public: 4 /// Obtain an identifier for the type of the protocol. 5 int type() const; 6 7 /// Obtain