openfire 源码的安装与部署测试

最近公司项目在openfire上面的问题追的很紧,都是别人肯剩下的骨头,不是没有资料,就是历史悠久的设计上的错误,就拿openfire来说,人家openfire明明就是username唯一,但是,丫的,公司就是搞个不唯一,之后弄个ID字段,导致发消息,以及获取头像出现了问题,哎,苦了搞openfire的我啊,牢骚就发到这吧,因为调试代码是一件费力不讨好的事情,也加上公司进度要按时完成,所以在家里的电脑上安装了一次openfire,以前在公司的或多或少不是从头搞的,现在从头搞,并记录下来,方便以后使用(啊~~~十一点多了,明天周六但是要开一上午的会,洗洗睡了,明天再写)

首先,我们要准备一些我们需要的工具:

1、Myeclipse,我用的是2013半的;

2、openfire的源码包

下载地址:openfire

openfire 源码的安装与部署测试_第1张图片

在这可以找到openfire的源码包openfire_src_3_9_3.zip的下载;

3、openfire需要的jar包,点击下载,这几个jar包可以解决一部分导入工程错误的问题,我也不知道openfire为什么会少这几个包。

OK,都准备好了,开始操作了!

一、解压下载好的openfire源码,并处理

我下载好的源码包名称是:downloadServlet,解压后135.8MB,并且只有一个名为openfire_src的文件夹,看着下划线不舒服,我把它改为openfire。打开文件夹会有3个HTML网页,看内容是更新日志,自我描述什么的,删掉!

这样我们剩下build、documentation、resources、src这四个文件夹,打开build文件夹,打开eclipse文件夹,并把其中的文件及文件夹复制到openfire目录下,这样我们有了五个文件夹和连个文件,如下图:

openfire 源码的安装与部署测试_第2张图片(看清目录结构啊!!!!!!!!!!)

做完这些还是不够的,因为myeclipse依旧不能识别文件夹openfire为一个项目,接下来我们需要找到一个已存在的java项目,在根目录复制.classpath与.project连个文件到openfire文件夹下,之后把classpath文件中的内容复制到.classpath(‘点’classpath)

中并保存,把project文件中的内容复制到.project文件中并保存,之后就可以删掉不带点的文件了只剩下.classpath与.project,这么做是为了让myeclipse识别openfire文件下是一个java项目,因为我们不能轻松在window下创建开头为‘.’的文件所以只能复制现有的文件替换内容。


之后我们再把openfire需要的jar包打开,其中bouncycastle.jar复制到openfire\build\lib\dist目录下,其余的jar包复制到openfire\build\lib目录下。

OK,源码的处理到此结束,下面我们可以吧openfire导入到myeclipse中了!

二、导入openfire源码到myeclipse

把openfire导入myeclipse中,哦,出现了红叉了,对的,没有红叉就出事了,先不管红叉,我们打开项目下的build/lib目录,发现我们后复制到lib中的jar包没有导入项目中:

openfire 源码的安装与部署测试_第3张图片

OK,鼠标右键没有导入的jar包,选择Build Path,点击Add to Build Path,分别把这几包导入,导入后项目的叉瞬间少了几个

接下来我们解决剩下的错误:

openfire 源码的安装与部署测试_第4张图片

这个包下两个类出错,解决办法就是实现没有被实现的接口方法


实现方法后,SipManager.java中   serverTransaction.sendResponse(notImplemented);  这句代码报错,通过myeclipse的自动修复,加上try-catch捕获异常就可以了。


这样项目中就只剩下一个地方的错误了:src/java/org/jivesoftware/util/CertificateManager.java


其中


1、ASN1Encodable o = otherNameSeq.getObjectAt(1);报错,改为ASN1Encodable o = (ASN1Encodable) otherNameSeq.getObjectAt(1);


2、deros.writeObject(csr.toASN1Primitive());报错,改为deros.writeObject(csr.toASN1Object());


3、GeneralNames subjectAltNames = new GeneralNames(new GeneralName[]{othernameGN});报错,改为GeneralNames subjectAltNames = new GeneralNames(othernameGN);


这样,所有的红叉都没有了,可以编译了!


三、编译openfire:

点击Window -> Show View -> Ant,在Ant中选择Add Buildfiles,将build目录下的build.xml选中,然后ok

openfire 源码的安装与部署测试_第5张图片


之后运行build.xml


开始编译,等待一小会显示BUILD SUCCESSFUL,就是编译成功了!


四、配置openfire源码并运行:

选中项目,点击run -> run configurations;

1、Main标签

openfire 源码的安装与部署测试_第6张图片


2、Arguments标签

openfire 源码的安装与部署测试_第7张图片


VM arguments中填入-DopenfireHome="${workspace_loc:openfire}/target/openfire"其中第一个openfire是你的项目名,如果你的项目名叫openfirexxoo,这里就填

-DopenfireHome="${workspace_loc:openfirexxoo}/target/openfire"

openfire 源码的安装与部署测试_第8张图片

3、Classpath标签:

选择User Entries之后在右侧点击Advanced...


openfire 源码的安装与部署测试_第9张图片

之后点击OK


选择src下i18n与resources文件,并点击OK


4、Common标签


openfire 源码的安装与部署测试_第10张图片

配置完之后,提交,并运行

控制台显示


openfire 源码的安装与部署测试_第11张图片

这样我们就能通过浏览器访问http://127.0.0.1:9090进入openfire的后台进行服务器、语言等初始配置了。


关于启动后,和配置时的错误请看下一篇“openfire报错及处理方法”


最后说一点跑题的话,openfire我在三个电脑装过不下20遍,各种问题,让我不能成功的安装,刚接触openfire那时很烦,一遍一遍的按,但是这次,我一次就安装好了,所以,做程序员,放宽心态,轻轻松松的


2015-10-27更新

已增加3.10.2版本的源码部署,地址:http://blog.csdn.net/yezis/article/details/49433669

你可能感兴趣的:(Openfire)