最近公司项目在openfire上面的问题追的很紧,都是别人肯剩下的骨头,不是没有资料,就是历史悠久的设计上的错误,就拿openfire来说,人家openfire明明就是username唯一,但是,丫的,公司就是搞个不唯一,之后弄个ID字段,导致发消息,以及获取头像出现了问题,哎,苦了搞openfire的我啊,牢骚就发到这吧,因为调试代码是一件费力不讨好的事情,也加上公司进度要按时完成,所以在家里的电脑上安装了一次openfire,以前在公司的或多或少不是从头搞的,现在从头搞,并记录下来,方便以后使用(啊~~~十一点多了,明天周六但是要开一上午的会,洗洗睡了,明天再写)
首先,我们要准备一些我们需要的工具:
1、Myeclipse,我用的是2013半的;
2、openfire的源码包
下载地址:openfire
在这可以找到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目录下,这样我们有了五个文件夹和连个文件,如下图:
做完这些还是不够的,因为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包没有导入项目中:
OK,鼠标右键没有导入的jar包,选择Build Path,点击Add to Build Path,分别把这几包导入,导入后项目的叉瞬间少了几个
接下来我们解决剩下的错误:
这个包下两个类出错,解决办法就是实现没有被实现的接口方法
实现方法后,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
之后运行build.xml
开始编译,等待一小会显示BUILD SUCCESSFUL,就是编译成功了!
四、配置openfire源码并运行:
选中项目,点击run -> run configurations;
1、Main标签
2、Arguments标签
VM arguments中填入-DopenfireHome="${workspace_loc:openfire}/target/openfire"其中第一个openfire是你的项目名,如果你的项目名叫openfirexxoo,这里就填
-DopenfireHome="${workspace_loc:openfirexxoo}/target/openfire"
3、Classpath标签:
选择User Entries之后在右侧点击Advanced...
之后点击OK
选择src下i18n与resources文件,并点击OK
4、Common标签
配置完之后,提交,并运行
控制台显示
这样我们就能通过浏览器访问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