Openfire3.9.3源代码导入eclipse中开发配置教程

来源:互联网 发布:贵金属手机交易软件 编辑:程序博客网 时间:2024/05/18 17:02

      这篇文章向大家介绍一下,如何把openfire3.9.3源码导入eclipse中,编译并启动的详细过程。

      首先得感谢这篇文章的作者,http://www.micmiu.com/opensource/openfire/openfire-src-config/,正是在这篇文章的帮助之下,我成功将openfire导入eclipse,本文大部分内容也是那篇文章的,我冠以原创之名,是为了留个笔记和在新版中出现的问题给大家一点帮助,毕竟我也花了不少的时间,希望不会被说成侵权。

       入正题,看到这篇文章的的网友应该已经安装了jdk,eclipse,我就不在安装这些开发工具上赘述了,附载一下openfire的下载地址:http://www.igniterealtime.org/downloads/index.jsp。

ps:可能现在的官网最新版本已经不是3_9_3了,也许你找不到下载地址,这里提供一个小技巧,就是你先点击进去下载最新版本的页面,然后浏览器就会有下载链接地址,版后面的改成你要的相应版本号就可以。

1、下载源码openfire_src_3_9_3.zip,目前最新的版本是3.9.3

2、把下载好的openfire_src_3_9_3.zip解压到工作空间,结构和目录如下:


3、把openfire_src\build\eclipse目录下面的settings、classpath、project全部复制到openfire_src\ 目录下,然后把openfire_src\classpth、openfire_src\project、openfire_src\settings修改成Eclipse工程配置文件格式,重命名为在每个原有的名字上加上一个点,即.classpth、.project、.settings。注意:在windows下面不能直接重命名,需要在dos下面操作,即进入相应的目录执行,rename classpth .classpth即可,其它两个文件执行一样的操作:


4、然后打开Eclipse,选择 File –> Import… –> Existing Projects into Workspace  选择F:\workspace\openfire_src 导入即可:



导入后目录结构如下:


大家会发现自己这个项目上出现了一个感叹号,进入构建路径,会发现:


这说明这个jar包缺失了,选中这个文件,然后点击右边的Remove按钮,将其移除,当然,我们也可以去网上下载一个,点击右边的Add JARs...将其加上,不过我没加也没出现问题,可能是某些插件需要这个jar包,现在不管他了。


移除后出现三个错误,没关系,我们一步步修复错误,\openfire_src\src\java报错,是因为有jar包,没有引进来,我们将其引进即可:


注意:一次只能引用一个,所以需要操作四次,才行。点击OK以后,我们发现\openfire_src\src\java上的错误已经没有了。\openfire_src\src\plugins\clustering\src\java报错,是因为缺少coherence.jar,coherence-work.jar,tangosol.jar这三个jar包,我们将复制到\openfire_src\src\plugins\clustering\lib目录下,然后将这三个jar包,加入构建路径:


这时我们发现\openfire_src\src\plugins\clustering\src\java上的错误已经消失了,这里我提供一下这三个jar包的下载地址,http://download.csdn.net/detail/su_tianbiao/8653959,当然,你也可以去其它地方下载。

最后一个在\openfire_src\src\plugins\sip\src\java上的报错是因为 SipCommRouter.java和SipManager.java 这两个类没有实现抽象方法和完成异常处理,最简单的解决办法是利用Eclipse自动修复功能进行修复即可。现在我们发现我们的项目已经没有任何错误了。

5、ANT编译项目

Eclipse已经集成了Ant,所以我们只需要在 /openfire_src/build/build.xml 文件右击,选择Run As –> Ant Build 即可完成编译,编程成功后,会在/openfire_src/的跟目录下生成两个新的文件夹:target 和 work 。

6、运行Openfire项目

①、在Build Path配置中把  /openfire_src/src/i18n 、/openfire_src/src/resources/jar 、/openfire_src/build/lib/dist 文件夹添加到 Source 中,如图:

②配置启动参数

选择Run –> Run Configurations… 左边的Java Application,单击右键,选择 New:


把默认name:New_configuration 修改成:ServerStarter。

选中Main选项卡,点击Browse按钮选择 openfire_src 项目;单击Search 按钮输入:ServerStarter 自动过滤后选择:ServerStarter – org.jivesoftware.openfire.starter:


选中Arguments选项卡,在VM arguments中填入:

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

注意:项目路径 ${workspace_loc:openfire_src}

选中Common选项卡,将Debug和Run打钩(方便之后快速启动),然后点击apply,再点击run:


③运行后控制台日志如下:


④浏览器中输入地址: http://127.0.0.1:9090 回车:


看到上述界面表示Openfire的源码配置、导入、编译、启动已经圆满成功了。

终于完成了,希望对大家有帮助,下一篇,我将介绍怎样在Openfire中开发插件

参考:Openfire 官网开发文档


最后附上可能错误解决方法:

错误处理

 

在配置完成后,有些同学启动项目并不会正常启动,而是会出现一些其他错误。

比如说:

Java代码  收藏代码
  1. log4j:WARN No appenders could be found for logger (org.jivesoftware.util.Log).  
  2. log4j:WARN Please initialize the log4j system properly.  
  3. Could not locate home  
  4. java.io.FileNotFoundException  
  5.     at org.jivesoftware.openfire.XMPPServer.locateOpenfire(XMPPServer.java:874)  
  6.     at org.jivesoftware.openfire.XMPPServer.initialize(XMPPServer.java:347)  
  7.     at org.jivesoftware.openfire.XMPPServer.start(XMPPServer.java:468)  
  8.     at org.jivesoftware.openfire.XMPPServer.<init>(XMPPServer.java:212)  
  9.     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)  
  10.     at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)  
  11.     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)  
  12.     at java.lang.reflect.Constructor.newInstance(Unknown Source)  
  13.     at java.lang.Class.newInstance0(Unknown Source)  
  14.     at java.lang.Class.newInstance(Unknown Source)  
  15.     at org.jivesoftware.openfire.starter.ServerStarter.start(ServerStarter.java:113)  
  16.     at org.jivesoftware.openfire.starter.ServerStarter.main(ServerStarter.java:58)  
  17. 启动服务器时出错。请检查日志文件以获取更多信息。  

 

 

这种情况是由于源码中配置的路径错误引起的,请打开文件org.jivesoftware.openfire.XMPPServer

 

我们来看这一行

 

Java代码  收藏代码
  1. // If we still don't have home, let's assume this is standalone  
  2.        // and just look for home in a standard sub-dir location and verify  
  3.        // by looking for the config file  
  4.        if (openfireHome == null) {  
  5.            try {  
  6.                openfireHome = verifyHome("..", jiveConfigName).getCanonicalFile();  
  7.            }  
  8.            catch (FileNotFoundException fe) {  
  9.                // Ignore.  
  10.            }  
  11.            catch (IOException ie) {  
  12.                // Ignore.  
  13.            }  
  14.        }  

 

 

请看verifyHome方法的第一个参数,这里配置的就是相对的路径“..”而我们重新编译的时候,配置到的路径不是这里,那么就要根据你配置的路径来修改前面的地址。

 

我的是这样:

 

Java代码  收藏代码
  1. openfireHome = verifyHome("D:\\openfire_src\\openfire_src\\target\\openfire", jiveConfigName).getCanonicalFile();  

 

我的配置在:openfire_src\\openfire_src\\target\\openfire文件夹下。

 

设置完毕之后,重新启动,就可以正常使用了!


这里有必要补充一下数据库乱码问题:


解决openfire在使用MySQL数据库后的中文乱码问题

openfire是一个非常不错的IM服务器,而且是纯Java实现,具有多个平台的版本,他的数据存储可以采用多种数据库,如MySQL,Oracle等。

在实际使用时大家遇到最多的就是采用MySQL数据库后的中文乱码问题,这个问题十分有趣,而且从现象上可以看出openfire内部的一些机制。

实际问题是这样的:首先启动openfire服务器,然后利用客户端或直接登录到后台新建一个帐户,为该帐户指定一些中文的属性,如姓名等。如果不重启服务器,你永远不会觉得有什么不对的地方,因为所有的中文显示都是正常的。接下来重启一下openfire,再用建立的帐号登录客户端或进入后台管理端查看,会发现所有的中文全都变成了问号。登录到数据库中进行查看,发现所有的中文字符也均为问号,这说明了两个问题:

openfire具有应用层缓存 
数据库编码存在问题 
解决办法其实也很简单,首先要保证你为openfire创建的数据库编码是utf8的,建表语句如下:

create database openfire default character set utf8 default collate utf8_general_ci

当你原来就创建好数据库时,你可以用:

 alter database openfire default character set utf8 default collate utf8_general_ci;

其次,在初始化openfire数据库,即第一次配置openfire服务器时,在连接数据库那里的连接串要加入字符编码格式,必须在连接里增加UTF8的编码要求,连接字符串设置如下:

jdbc:mysql://127.0.0.1:3306/openfire?useUnicode=true&characterEncoding=utf8

如果已经安装完成,这个配置也是可以改动的,直接到openfire的安装目录下,找到conf/openfire.xml这样一个文件,打开找到如下的XML节,修改其中的serverURL即可

<database>
<defaultProvider>
<driver>com.mysql.jdbc.Driver</driver>
<serverURL>jdbc:mysql://127.0.0.1:3306/openfire?useUnicode=true&amp;characterEncoding=utf8</serverURL>

注意:由于&具有特殊含义,因此原&符号必须被转义为&amp;



0 0
原创粉丝点击