openfire源码部署心得

更新时间:2024-06-02 07:12:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一. 部署

1解压openfire源码放到workspace下.建立一个java project,名字与解压后源码文件夹名字一样,这样就可以把openfire源码导入到eclipse中 2.使用ant进行编译。

在openfire项目导入进来之后,点击 Window -> Show View -> Ant

然后就会显示出Ant的窗口,在Ant 视图中,单击右键,在弹出的快捷菜单中选择Add Buildfiles

在弹出的对话框中,展开openfire_src/build文件夹,选择build目录下的build.xml 接下来双击执行openfire[default] (带一个三角符号的那个) 在控制台中显示“BUILD SUCCESSFUL” 那么就表示编译成功,

3.设置启动项目

点击openfire_src项目,在菜单栏中选择Run->Open Run Dialog (Or Run->Run Configurations)

弹出一个对话框,在左侧菜单中右键点击Java Application,选择New创建启动配置 在Run窗口的Main选项卡中, 修改最上面Name文本框中的值,改成包含要启动的类的工程名openfire_src

(没什么用,就是一个标识,随便起名字。) 在Run窗口的Main选项卡中, project框中填写:openfire_src

Main class 填写:org.jivesoftware.openfire.starter.ServerStarter 点击Apply应用。

点击进入Arguments选项卡,在上面那个框(VM arguments:)中填写 -DopenfireHome=\

其中${workspace_loc:openfire_src} 中的 openfire_src 要根据你的项目名来进行同步修改。 点击Apply应用。

点击进入Classpath选项卡,选中User Entries,然后点击右侧的Advanced按钮,会弹出一个小框,选择Add Folders,单击OK。

选择 openfire_src\\src\\i18n点OK 按钮将这个文件夹加入到Classpath选项卡中 选择 openfire_src\\src\\resources 目录也加到 Classpath选项卡中

点击Apply应用。

5.点击进入Common选项卡中,勾选Run复选框。 点击Apply应用。

在进行这些配置之后,就算是基本完工了。

可以直接点击配置框最下方的Run按钮,或者单击菜单栏Run->Run开始跑程序。

二.错误解决

1.导入项目后一直报错 原因:缺少jar包

解决办法:将openfire目录下build/lib目录下的所有包都通过JAVA BUILDPATH导入到项目

中来,这个时候可能还缺包,接着导入这几个包。导完后可能还缺,缺少的包在openfire目录下的src/plugins中,如果能找到报错的类在哪个包中就直接加进来,否则的话把所有的包都导进来吧。都导完以后就不报错了

2. java.lang.NullPointerException

at org.jivesoftware.admin.AdminConsole.getAppName(AdminConsole.java:122) at org.jivesoftware.openfire.admin.decorators.setup_jsp._jspService(setup_jsp.java:168) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)

at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)

at org.mortbay.jetty.servlet.Dispatcher.include(Dispatcher.java:192)

at

com.opensymphony.module.sitemesh.filter.PageFilter.applyDecorator(PageFilter.java:156)

at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:59) at

org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)

at org.jivesoftware.util.LocaleFilter.doFilter(LocaleFilter.java:66)

at

org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) at

org.jivesoftware.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:42) at

org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)

at org.jivesoftware.admin.PluginFilter.doFilter(PluginFilter.java:70)

at

org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)

at org.jivesoftware.admin.AuthCheckFilter.doFilter(AuthCheckFilter.java:99) at

org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)

at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) at

org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)

at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)

at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:324)

at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) at

org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:829)

at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)

at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488) Powered by Jetty://

这时因为是文件路径所导致的问题,需要将admin-sidebar.xml和

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

3.如果文件路径配置不正确(即Openfire的Home没有设定或者设置不正确),就可能在运行时出现如下所示的问题: Could not locate home

java.io.FileNotFoundException......

ERROR 12114 [Jive-ERR] ():

java.io.FileNotFoundException: XML properties file does not exist: openfire.xml........

在XMPPServer类中有一个locateOpenfire方法,这个方法就是设置openfireHome属性。 第1部分的代码如下:

String jiveConfigName = \// First, try to load it openfireHome as a system property. if (openfireHome == null) {

String homeProperty = System.getProperty(\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(\}

catch (FileNotFoundException fe) { // Ignore. }

catch (IOException ie) { // Ignore. } }

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

或者,代码里加一行如果获取到的地址为空的话自己手动赋值进去

本文来源:https://www.bwwdw.com/article/ctl6.html

Top