搭建即时通讯服务器——openfire部署(源代码和二次开发)

最近在做基于android的即时通讯软件,晚上也看了不少方法,曾想尝试用百度云推送来简单实现。无奈现在百度云也开始收费了,遂只好自己搭建服务器了。后来了解到,基于XMPP通讯协议确实有这么一款免费开源服务武器——openfire.所以就抱着试试的心态来搞搭建测试了。

由于自己还有其他拓展功能,因此想做一下二次开发,就把源码在本地部署了下,期间遇到不少问题,记录下来以供参考。

1.openfire的安装

这个算是最基础的啦,去官网下载openfire,按步骤安装,注意帐号密码啥的。这些有很多博客里都有介绍,就不一一说明了。贴出一个地址,仅供参考。其他系统也类似。

mac搭建openfire服务器教程


2.openfire_src源代码的部署和二次开发

这个是本文的重点,我个人搭建的时候消费了点功夫。不过说实话,看明白了其实很简单。但是盲目就开始搭建还是会有点头疼。先贴一下网上看到的两个搭建帖子
Openfire开发配置,Openfire源代码配置,OpenFire二次开发配置(eclipse)
Openfire开发配置,Openfire源代码配置,OpenFire二次开发配置
都介绍得很详细,但是我结合着看就弄混淆了。鄙视一下自己。我这里所说 部署和一些常见问题的解决

1.下载openfire_src源代码

openfire_src(进官网,点击download->source->openfire_src.zip)

搭建即时通讯服务器——openfire部署(源代码和二次开发)_第1张图片

2.解压

把源代码解压出的openfire_src文件夹放至eclipse workplace(注意:若是变更了解压出来的文件名,则接下来所有用到文件名的地方都要作出相应更改,否则会报错!)


3.把openfire_src文件夹里的三个无用的html文件删除

 

4.导入项目工程

刚开始我挺费了点功夫,按照第一篇说的来,发现有很多问题。按第二个篇的话,没发现怎么到工程项目。后来才发现没那么麻烦。把解压的项目放进你的工作空间,然后在eclipse中新建java project,注意项目名跟刚刚考进去的一样(openfire_src),然后他自动就会在当前文件夹下建项目,并把你刚刚拷贝过去的文件包含进去。

打开eclipse,新建一个名为openfire_src的Java Project,然后finish

搭建即时通讯服务器——openfire部署(源代码和二次开发)_第2张图片

    注:此处的默认路径为openfire_src文件夹的绝对路径

5.导入jar包

项目建好后如图所示,其中有几个目录报错,通常是由于缺少3个jar包:coherence.jar、coherence-work.jar、tangosol.jar

如果还有,则 根据自己的提示下载自己需要的包,实在不行就全部下下来都导入到项目当中去.
openfire缺少的包

下载这几个jar包,然后复制到/openfire_src/build/lib目录下,

搭建即时通讯服务器——openfire部署(源代码和二次开发)_第3张图片


选中3个新添加的jar包,点击右键,选择Build Path -> Add to Build Path


这时候还有可能会出现以下错误

(1)把jar包编译后还是会有报错,

一种错误可能是没有实现继承父类的抽象方法,解决办法是使用自动修复,即add unimpl......添加抽象方法;

还有一种错误是没有处理异常,同样可以自动修复..

(2)包里边存在 ..类已经被定义(class has already difined)

解决方法,直接删除该类即可。(在其他类里边已经定义有该函数和方法)

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

搭建即时通讯服务器——openfire部署(源代码和二次开发)_第4张图片

 

7.把Java JDK的lib目录下的tools.jar包拷贝到 Java JRE的lib目录下

jdk/lib (为你当初安装java jdk的路径) -> java jre(安装路径)

8.运行选中的build.xml文件


等待运行,带盖几十秒。运行完成后,刷新项目,目录多出两个文件夹

搭建即时通讯服务器——openfire部署(源代码和二次开发)_第5张图片

 

将target/lib目录下的所有jar包选中,单击右键,选择Build Path –> Add to Build Path


9、选中项目,点击run -> run configurations

搭建即时通讯服务器——openfire部署(源代码和二次开发)_第6张图片

 

10、选择run configurations左边的Java Application,单击右键,选择New

搭建即时通讯服务器——openfire部署(源代码和二次开发)_第7张图片

 

11、选中Main选项卡,点击Browse选择openfire_src项目;单击Search选择ServerStarter - org.jivesoftware.openfire.starter,结果如下

搭建即时通讯服务器——openfire部署(源代码和二次开发)_第8张图片

 
12、选中Arguments选项卡,在VM arguments中填入-DopenfireHome="${workspace_loc:openfire_src}/target/openfire"

搭建即时通讯服务器——openfire部署(源代码和二次开发)_第9张图片

 

13、选中Classpath选项卡,选中User Entries,点击右边的Advanced按钮

搭建即时通讯服务器——openfire部署(源代码和二次开发)_第10张图片

 

14、在弹出的框中选中Add Folders,选中src/i18n文件夹,点击ok

搭建即时通讯服务器——openfire部署(源代码和二次开发)_第11张图片搭建即时通讯服务器——openfire部署(源代码和二次开发)_第12张图片

 

15、重复上一步骤把src/resources选中添加,结果如下:User Entries下多了两个文件夹

搭建即时通讯服务器——openfire部署(源代码和二次开发)_第13张图片搭建即时通讯服务器——openfire部署(源代码和二次开发)_第14张图片

 

16、选中Common选项卡,将Debug和Run打钩,然后点击apply,再点击run

搭建即时通讯服务器——openfire部署(源代码和二次开发)_第15张图片

这时候有可能遇到以下错误:

(1) java.lang.NullPointerException     at org.jivesoftware.admin.AdminConsole.getAppName(AdminConsole.java:122)

这因为是文件路径所导致的问题,需要将admin-sidebar.xml和openfire_i18n_en.properties这2个文件直接放在openfire\bin目录下即可解决这个问题。

如果再次出现,这样的问题,就需要将openfire目录下的你把openfire下的work 和target文件都删除了,然后重新发布一个。因为web的内容不会自动更新的,只有.class会自动更新。


(2)jar multipte .。。。。(jar包重复)

一般是因为后来产生的 target/lib文件下边的jar包与最初导入的build/lib下jar包重复,移出一个即可。

(3)Could not locate home 
java.io.FileNotFoundException...... 

这种情况,是文件路径配置不正确(即Openfire的Home没有设定或者设置不正确)

解决方法

在XMPPServer类中有一个locateOpenfire方法,这个方法就是设置openfireHome属性。 
第1部分的代码如下: 
String jiveConfigName = "conf" + File.separator + "openfire.xml"; 
// First, try to load it openfireHome as a system property. 
if (openfireHome == null) { 
String homeProperty = System.getProperty("openfireHome"); 
try { 
if (homeProperty != null) { 
openfireHome = verifyHome(homeProperty, jiveConfigName); 


catch (FileNotFoundException fe) { 
// Ignore. 


是在环境变量设置了Openfire的Home的情况下寻找openfire.xml文件 

你可以更改第二部分的代码让Openfire找到Home: 
// If we still don't have home, let's assume this is standalone 
// and just look for home in a standard sub-dir location and verify 
// by looking for the config file 
if (openfireHome == null) { 
try { 
//修改的是下面的代码,将".."替换为其他路径了 
openfireHome=verifyHome("C:\\Program Files\\Openfire", jiveConfigName).getCanonicalFile(); 

catch (FileNotFoundException fe) { 
// Ignore. 

catch (IOException ie) { 
// Ignore. 


这部分默认是找当前文件路径,你可以修改它为你安装openfire的路径,这样问题就可以解决了。


成功运行结果


在浏览器中输入上图的地址http://127.0.0.1:9090

搭建即时通讯服务器——openfire部署(源代码和二次开发)_第16张图片

 

选择中文,然后继续。服务器设置可直接跳过。数据库设置选择标准数据库连接,点击继续

搭建即时通讯服务器——openfire部署(源代码和二次开发)_第17张图片

 

在数据库设置-标准连接设置界面,选择数据库驱动mysql,更改数据库url,其中需要更改的有服务器ip地址,还有数据库名,建议单独建立一个名为openfire的数据库。输入数据库管理员的账号和密码,下一步。

搭建即时通讯服务器——openfire部署(源代码和二次开发)_第18张图片

 

数据库连接成功后界面,直接点击继续。

搭建即时通讯服务器——openfire部署(源代码和二次开发)_第19张图片

 

管理员账户设置界面,输入管理员的邮箱地址,还有管理员的账号的密码,初始账号为admin。

搭建即时通讯服务器——openfire部署(源代码和二次开发)_第20张图片

 

完成设置,登录到管理控制台,初始账户名admin密码为上一步设置的密码。

搭建即时通讯服务器——openfire部署(源代码和二次开发)_第21张图片

 

登陆成功后显示

搭建即时通讯服务器——openfire部署(源代码和二次开发)_第22张图片

 

检测服务器是否配置成功,到http://www.igniterealtime.org/downloads/index.jsp下载Spark

搭建即时通讯服务器——openfire部署(源代码和二次开发)_第23张图片

 

安装Spark,一路next,然后finish。运行Spark,创建Spark账号

搭建即时通讯服务器——openfire部署(源代码和二次开发)_第24张图片

 

使用创建的账号登陆Spark,登陆成功可在Openfire管理控制台的用户组看到新注册的用户和在线状态

搭建即时通讯服务器——openfire部署(源代码和二次开发)_第25张图片搭建即时通讯服务器——openfire部署(源代码和二次开发)_第26张图片

 

 


你可能感兴趣的:(搭建即时通讯服务器——openfire部署(源代码和二次开发))