openfire编译

合集下载

openfire详细安装配置步骤

openfire详细安装配置步骤

openfire详细安装配置步骤说明:红⾊字体可任意改动(但⼀旦改动,后⾯与此对应的名称也要⼀起改动),该⽂档下的步骤是在win7(32位,64位皆可)Eclipse环境下实现的,openfire⽤的是openfire_src_3_8_2版本;第⼀步:在D盘⾥新建⼀⽂件夹openfire_src,把openfire_src_3_8_2/openfire下的所有⽂件夹copy到openfire_src⾥;第⼆步:因为openfire源码中没有包含coherence.jar、coherence-work和tangosol.jar包,所以把这三个包copy到D://openfire_src/build/lib⾥;第三步:启动Eclipse,新建⼯程File-->New-->javaproject,填⼊项⽬名openfire,选中Createprojectfromexistingsource,然后单击Browse...选出在D盘⾥新建的Openfire_src;单击Finish。

第四步:双击openfire,会看到3处错误,第⼀处错误,是由于hazelcast下⾯包⾥的java代码与clustering下⾯包⾥的java代码重复引起的,直接对⽐包名跟java⽂件名即可,然后在clustering源码中删除与hazelcast想同的java代码;完成后hazelcast将没有错误;第五步:plugins中的错误的修正,直接打开plugins中的最后⼀个包,双击SipCommRouter.java找出出错的地⽅,把光标停留在出错部分,系统会⾃动提⽰错误原因,并提供解决⽅案,单击第⼀个⽅案(Addunimplementedmethods),再点击保存(或按Ctrl+S),SipCommRouter.java的错误会消失;SipManager.java的错误也是这样改的(注意它⾥⾯有2处错误),改正后保存,错误会全部消失(包裹src的错误);第六步:删除clustering插件的plug.xml⽂件,双击src--->双击plugins---->双击clustering----->删除plug.xml;然后再右键点击openfire⼯程--->buildpath---->configurationbuildpath会出现界⾯:单击AddFolder...然后把src/i18n和src/resources/jar勾上,单击OK,第七步:使⽤ant编译,单击window->showview->ant,会出现如下图右侧的界⾯,在空⽩区域右击,选择AddBuildfiles...(或者直接单击蜘蛛快捷图标)出现如下窗⼝项⽬名->buil->build.xml,双击build.xml再次右击右侧空⽩区域,选择RefreshBuildfiles进⾏刷新,最后,单击ant窗⼝⾥⾯的run(也就是绿圆⾥有⼀个⽩⾊三⾓形的图标);等Console窗⼝⾥不再弹出编译信息时,再次单击ant窗⼝⾥⾯的run,Console窗⼝最后倒数第⼆⾏会出现BUILDSUCCESSFUL的提⽰;如下图:第⼋步:右击项⽬名openfire,选择Refresh进⾏刷新,会发现多出了两个⽂件夹target和work。

openfoam mpi编译

openfoam mpi编译

OpenFOAM是一个由英国OpenCFD公司开发的开源计算流体力学软件。

它采用C++编程语言,可以在Linux操作系统上运行。

OpenFOAM具有模块化的结构,使得用户可以方便地定制和扩展其功能。

为了加快计算速度,OpenFOAM还支持MPI并行计算。

MPI(Message Passing Interface)是一种用于编写并行程序的标准。

使用MPI,用户可以在多个处理器上同时执行程序,从而加快计算速度。

在OpenFOAM中,MPI被用于加速求解大规模计算流体力学问题的速度。

在本文中,我们将介绍如何在OpenFOAM中使用MPI进行编译。

一、安装MPI库我们需要安装MPI库。

在Linux系统中,MPI一般通过包管理器进行安装。

以Ubuntu系统为例,可以使用以下命令安装MPI库:sudo apt-get install mpich二、配置MPI环境安装完MPI库后,需要配置MPI环境。

在OpenFOAM中,MPI的配置是通过修改OpenFOAM的环境变量来实现的。

我们需要找到OpenFOAM的安装路径,然后在用户目录下找到.bashrc文件,在其中添加如下行:export WM_MPLIB=SYSTEMOPENMPIexport WM_COMPILE_OPTION=mpi其中,WM_MPLIB指定了使用的MPI库,这里我们使用了OpenMPI;WM_COMPILE_OPTION指定了编译选项为MPI。

三、进行编译配置完成后,就可以进行编译了。

需要清理之前的编译结果,可以使用以下命令进行清理:wclean all进行新的编译:wmake这样就可以在OpenFOAM中使用MPI进行编译了。

四、检查编译结果需要检查编译结果是否正确。

可以通过运行一个包含MPI并行计算的例子来验证编译是否成功。

如果例子能够正确运行并且加速效果明显,说明MPI编译成功。

总结通过本文介绍,我们了解了如何在OpenFOAM中使用MPI进行编译。

Openfire-java工程搭建

Openfire-java工程搭建

Openfire-java工程搭建Linjunjie一、下载Openfire源代码目前版本为:3.7.0/downloads/download-landing.jsp?file=openfire/openfire_src _3_7_0.tar.gz二、导入Openfire工程到Eclipse1、解压Openfire src包到Eclipse的workspace目录例如,workspace目录为E:\work\project,解压后为2、Eclipse中新建Java Project,并选中上面解压出来的目录,“Finish”3、添加Plugin的依赖包coherence(3.3.1版本,如下),编译通过4、打开Ant view,右键中加入build.xml编译打包脚本5、配置Openfire运行环境1)打开运行配置对话框,新建Java Application配置2)配置运行参数Main标签页中Name:openfireMain class:org.jivesoftware.openfire.starter.ServerStarter选中“Stop in main”Arguments标签页中VM arguments:-DopenfireHome="${workspace_loc:openfire_src}/target/openfire"Classpath标签页中User Entries Advanced->Add Floders添加两个目录:openfire_src\resources、openfire_src\src\i18nCommon标签页中,勾选“Run”、“Debug”“Apply”配置参数。

3)复制配置文件到运行目录拷贝openfire_src\src\i18n\openfire_i18n_en.properties openfire_src\src\resources\jar\admin-sidebar.xml 到openfire_src\bin目录下三、Eclipse编译&运行openfire1、编译通过ant编译,双击Ant脚本2、Run/Debug“openfire”。

openfire开发环境配置说明

openfire开发环境配置说明

Openfire开发环境配置说明1、Mysql数据库的安装1.1、方法/步骤1.1安装:双击Setup.exe文件,开始mysql的安装。

出现下面的窗口2. 2点击Next开始下一步安装。

默认是Typical,选择Custom,因为Typical模式不允许改变安装路径,只能安装在C盘3. 3这里需要选择组件和更改文件夹位置,组件可以默认的,位置要选择Change 来改变(注意:安装mysql的路径中,不能含有中文)4. 4 点击Install开始安装5. 5安装完成,看到下面。

当然,我们选择“Skip Sign-Up”。

6. 6点击完成“Finsh”7.7现在开始配置的工作了。

点击Next继续。

选择Detailed Configuration,点Next。

8.下面这个选项是选择mysql应用类型(第一种是开发服务器,将只用尽量少的内存,第二种是普通WEB服务器,将使用中等数量内存,最后一种是这台服务器上面只跑mysql数据库,将占用全部的内存,)这里示例选择开发服务器,占用尽量少的内存,用户可根据自己的需求,选择其他选项。

9.接下来选择数据库用途,(第一种是多功能用途,将把数据库优化成很好的innodb存储类型和高效率的myisam存储类型,第二种是只用于事务处理类型,最好的优化innodb,但同时也支持myisam,最后一种是非事务处理类型,适合于简单的应用,只有不支持事务的myisam类型是被支持的。

)一般选择第一种多功能。

10.下面是选择数据存放位置,默认。

11.选择mysql允许的最大连接数,第一种是最大20个连接并发数,第二种是最大500个并发连接数,最后一种是自定义,你可以根据自己的需要选择12.下面是选择数据库监听的端口,一般默认是3306,如果改成其他端口,以后连接数据库的时候都要记住修改的端口,否则不能连接mysql数据库,比较麻烦,这里不做修改,用mysq的默认端口:3306。

openfire插件开发

openfire插件开发

作用:初始化时在控制台打印测试消息。

开发环境:winxp/myeclipse6.5/jdk1.5&1.6/mysql5.0/openfire3.6.3 QQ群:28588322 (openfire专题研究小组)开发步骤:1. 布署openfire3.6.3源码(请参考openfire3.6.3导入eclipse项目实现方法) 结构如下:2. src/plugins目录下新建文件夹itvi。

并按下图的目录结构新建对应的文件。

plugin.xml文件代码如下:<?xml version="1.0" encoding="UTF-8"?><plugin><class>org.jivesoftware.openfire.plugin.Itvi</class><name>Itvi</name><description>Broadcasts messages to users.</description> <author>openfireteam</author><version>1.7.0</version><date>2/19/2009</date><url></url><minServerVersion>3.6.3</minServerVersion></plugin>Itvi.java文件代码如下:package org.jivesoftware.openfire.plugin;import org.dom4j.Element;import org.jivesoftware.openfire.IQHandlerInfo;import org.xmpp.packet.*;import org.jivesoftware.openfire.handler.IQHandler;import org.jivesoftware.openfire.auth.UnauthorizedException;/*** 处理客户端发来的IQ,并回送结果IQ** @author Phoenix** Mar 14, 2008 4:55:33 PM** version 0.1*/import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.QName;import org.jivesoftware.openfire.XMPPServer;import org.jivesoftware.openfire.container.Plugin;import org.jivesoftware.openfire.container.PluginManager; import org.jivesoftware.openfire.disco.IQDiscoInfoHandler; import org.jivesoftware.openfire.disco.IQDiscoItemsHandler; import org.jivesoftware.openfire.forms.DataForm;import org.jivesoftware.openfire.forms.FormField;import org.jivesoftware.openfire.forms.spi.XDataFormImpl; import org.jivesoftware.openfire.forms.spi.XFormFieldImpl; import org.jivesoftware.openfire.resultsetmanager.ResultSet; import org.jivesoftware.openfire.resultsetmanager.ResultSetImpl; import er;import erManager;import erNotFoundException; import org.jivesoftware.util.*;import ponent;import ponentException;import ponentManager;import ponentManagerFactory;import org.xmpp.packet.IQ;import org.xmpp.packet.IQ.Type;import org.xmpp.packet.JID;import org.xmpp.packet.Packet;import org.xmpp.packet.PacketError;import org.xmpp.packet.PacketError.Condition;import java.io.File;import java.util.*;import java.util.Map.Entry;public class Itvi implements Plugin{private XMPPServer server;/** (non-Javadoc)** @see org.jivesoftware.openfire.container.Plugin#destroyPlugin()*/public void destroyPlugin(){}/** (non-Javadoc)** @seeorg.jivesoftware.openfire.container.Plugin#initializePlugin(org.jivesoftware.openfir e.container.PluginManager,* java.io.File)*/public void initializePlugin(PluginManager manager, File pluginDirectory){server = XMPPServer.getInstance();server.getIQRouter().addHandler(new ItviIQHander()); //System.out.println("测试插件启动成功");}}ItviIQHander.java文件代码如下:package org.jivesoftware.openfire.plugin;import org.dom4j.Element;import org.jivesoftware.openfire.IQHandlerInfo;import org.xmpp.packet.*;import org.jivesoftware.openfire.handler.IQHandler;import org.jivesoftware.openfire.auth.UnauthorizedException;/*** 处理客户端发来的IQ,并回送结果IQ** @author Phoenix** Mar 14, 2008 4:55:33 PM** version 0.1*/public class ItviIQHander extends IQHandler{private static final String MODULE_NAME = "group tree handler";private static final String NAME_SPACE = "com:im:group";private IQHandlerInfo info;public ItviIQHander(){super(MODULE_NAME);//info = new IQHandlerInfo("gruops", NAME_SPACE);info = new IQHandlerInfo("query", "jabber:iq:roster");//这里我们对”联系人”的IQ进入监控}/** (non-Javadoc)** @see org.jivesoftware.openfire.handler.IQHandler#getInfo()*/@Overridepublic IQHandlerInfo getInfo(){return info;}/** (non-Javadoc)** @seeorg.jivesoftware.openfire.handler.IQHandler#handleIQ(org.xmpp.packet.IQ) */@Overridepublic IQ handleIQ(IQ packet) throws UnauthorizedException{IQ reply = IQ.createResultIQ(packet);Element groups = packet.getChildElement();//1if (true){System.out.println("非法的请求类型111111");}if (!IQ.Type.get.equals(packet.getType())){System.out.println("非法的请求类型");reply.setChildElement(groups.createCopy());System.out.println("返回的最终XML-SetError前"+reply.toXML());reply.setError(PacketError.Condition.bad_request);System.out.println("返回的最终XML-SetError后"+reply.toXML());return reply;}//String userName =StringUtils.substringBefore(packet.getFrom().toString(),"@");//GroupManager.getInstance().initElement(groups,userName); //reply.setChildElement(groups.createCopy());//2//System.out.println("返回的最终XML" reply.toXML());return reply;}}3.打包插件a.第一次打包需配置ant工具。

openfire部分类说明

openfire部分类说明
iv. PresenceUpdateHandler:通过Session设置用户状态。 v. PresenceSubscribeHandler:处理状态订阅包。
g) 管理者类:
i. RosterManager:管理Roster,每个花名册可以广播用户状态给好友。
ii. PrivacyListManager:管理PrivacyList,如果不阻止联系人就发给他状态,使用PrivacyListProvider从数据库加载隐私列表。
g) VCardManager:用户名片管理。
3. standard modules:
a) IQHandler:全部被交给。IQBindHandler:处理绑定资源请求;IQSessionEstablishmentHandler:绑定资源后激活会话;IQAuthHandler:处理登录请求;IQPingHandler:处理ping请求;IQPrivateHandler:处理隐私请求;IQPrivacyHandler:处理私有列表请求;IQRegisterHandler:处理注册请求;IQRosterHandler:处理花名册请求;IQTimeHandler:处理时间请求。IQvCardHandler:处理名片请求;IQVersionHandler:处理版本请求;IQLastActivityHandler:处理最近活动请求;IQOfflineMessagesHandler:处理获取离线留言请求;IQPEPHandler:处理公共订阅请求;IQPEPOwnerHandler;IQSharedGroupHandler:处理共享组请求;AdHocCommandHandler:处理命令请求;IQDiscoInfoHandler;IQDiscoItemsHandler。

使用OpenFL进行游戏开发入门指南

使用OpenFL进行游戏开发入门指南

使用OpenFL进行游戏开发入门指南引言:游戏开发一直以来都是计算机科学领域的热门话题。

对于那些热爱游戏并希望亲自创建自己的游戏的人来说,了解游戏开发的基本原理和工具是至关重要的。

在本文中,我们将探讨使用OpenFL进行游戏开发的入门指南,帮助读者了解基本概念和技巧。

第一部分:OpenFL简介在开始具体介绍OpenFL之前,我们先简要介绍一下什么是OpenFL。

OpenFL是一个开源的跨平台游戏开发框架,它基于ActionScript语言和Haxe编译器。

OpenFL可以让开发者使用统一的代码库开发游戏,然后将游戏发布到不同平台,如Windows、Mac、iOS和Android等。

第二部分:准备工作在开始使用OpenFL进行游戏开发之前,我们需要进行一些准备工作。

首先,我们需要安装Haxe编译器和OpenFL框架。

Haxe是一种强类型的跨平台编程语言,它可以编译成多种语言,包括JavaScript、C++和Flash等。

安装完Haxe后,我们就可以通过Haxe命令行工具安装OpenFL了。

第三部分:创建游戏项目一切准备工作就绪后,我们可以开始创建游戏项目了。

在命令行中,使用OpenFL命令创建一个新的游戏项目,例如:openfl create MyGame这将创建一个名为"MyGame"的新游戏项目,并生成一些初始文件和文件夹。

在项目文件中,我们可以看到一个名为"Main.hx"的文件,这是游戏的入口点。

我们可以在这个文件中编写游戏的逻辑代码。

第四部分:游戏开发与设计游戏开发包括游戏逻辑的编写和游戏外观的设计。

在OpenFL中,可以使用Haxe编写游戏的逻辑代码,并使用OpenFL提供的API来处理图形渲染、动画和用户交互等方面的功能。

例如,我们可以使用OpenFL提供的Sprite类来创建游戏中的角色和物体。

Sprite类是OpenFL中的一个基本显示对象,我们可以给它添加纹理和动画,并控制其在游戏中的位置和行为。

openfire源代码研究

openfire源代码研究

Openfire源码研究Openfire源码目录结构1.build目录:build目录下收录的是生成安装文件(例如:rpm)所要的一些文件,例如JRE等。

2.resources目录:resources目录下收录的是一些为实现国际化(i18n)和本地化的一些编码文件(例如:英文,中文,法文,德文等)。

3.documentation目录:documentation目录下收录的是一些关于Openfire安装和配置的信息,但最终要的是这里有Openfire开发的Javadoc。

4.src目录:顾名思义这个src文件夹就是我们想要的Openfire源代码了,这下面又有许多文件夹,我们只要Java文件夹就好,这里面实现的Openfire的核心功能,通过它就可以调试Openfire了。

命名规则Openfire中常见的类名后缀命名包括Starter、Plugin、Listener、Dispatcher、Handler、Manager、Provider,通常情况下,这些命名类包括如下意义:XXStarter系统启动类,如org.jivesoftware.openfire.starter.ServerStarter,调用其start()方法可启动系统应用。

XXListener业务的最终处理类。

XXDispatcher调度类,其中有很多关键方法,如addListener(),以组合的方式,为类内定义的静态Set<XXListener>实例添加XXListener对象。

以便调用dispatchEvent(String property, EventType eventType, Map<String, Object> params)方法遍历处理Set集中的XXListener对象(通过调用XXListener对象的各实际方法完成实际业务)。

XXPlugin实现Plugin接口的插件类,需实现initializePlugin(PluginManager manager, File pluginDirectory)方法和destroyPlugin()方法。

openscenegraph编译

openscenegraph编译

openscenegraph编译OpenSceneGraph是一个开源的3D图形引擎,它提供了一系列的工具和库,可以帮助开发者快速构建高质量的3D应用程序。

在使用OpenSceneGraph之前,需要先进行编译和安装。

本文将介绍如何编译OpenSceneGraph。

一、准备工作在编译OpenSceneGraph之前,需要先安装一些必要的工具和库。

具体如下:1. CMake:用于生成Makefile文件。

2. OpenGL:用于渲染3D图形。

3. GLUT:用于创建窗口和处理用户输入。

4. GLEW:用于管理OpenGL扩展。

5. OpenAL:用于处理音频。

6. FreeType:用于渲染字体。

7. libjpeg、libpng、libtiff、libz:用于处理图片。

8. libcurl:用于处理网络请求。

以上工具和库可以通过包管理器进行安装,也可以从官网下载源码进行编译安装。

二、下载OpenSceneGraph源码可以从OpenSceneGraph官网下载最新的源码包,也可以从GitHub 上获取最新的代码。

下载完成后,解压缩到任意目录。

三、编译OpenSceneGraph1. 创建编译目录在OpenSceneGraph源码目录下创建一个build目录,用于存放编译生成的文件。

2. 运行CMake在build目录下运行CMake,生成Makefile文件。

具体命令如下:cmake ..如果需要指定安装目录,可以使用以下命令:cmake -DCMAKE_INSTALL_PREFIX=/path/to/install ..3. 编译在build目录下运行make命令,开始编译OpenSceneGraph。

具体命令如下:make如果需要使用多线程编译,可以使用以下命令:make -j4其中4表示使用4个线程进行编译。

4. 安装编译完成后,运行以下命令进行安装:make install如果之前指定了安装目录,需要使用以下命令:make install DESTDIR=/path/to/install四、测试OpenSceneGraph编译完成后,可以使用OpenSceneGraph提供的示例程序进行测试。

openfire编译和运行

openfire编译和运行

Openfire源码部署以及编译运行一、Openfire源码下载1)可以去官方网站:官网地址/projects/openfire/。

2)也可以利用eclispe自带的SVN插件导入,再次就过多介绍,官网上写的很清楚。

二、源码部署编译将源码解压到硬盘上。

如图:建立一个Java Project,并且项目名称一定要写成“Openfire”,否则会出错。

选中Create project from existing source项;在Directory中输入源码的路径(此值与第一个图的地址是相同的)具体操作如下图源码导入之后如下图所示,此时openfire是不可以运行的,还需要编译和配置。

1)接下来进行服务器编译配置,点击图标下拉菜单,选择“External ToolsConfigration”选项。

如下图:编译配置项命名,再次我就命名为openfire,也可以自己随意填写。

译代码的文件,他是一个叫做build.xml的配置文件。

如下图所示:果再选择“Targets”选项卡,勾选openfire选项然后选择“Common”选项卡,勾选“External Tools”,这样在以后编译时就不需要重复配置了,还要选择好适当的编码格式,一般情况下选择“UTF-8”,最点击“Apply”和run来运行编译程序。

等待最后控制台出现编译成功字样,编译就完成了。

如图:注意:有时候控制台再出现“BUILD SUCCRSSFUL”还会出现“警告”、“错误”等字样。

对“警告”我们可以忽视,但是对于出现的“错误”,我们要及时修改,一般的错误就是找不到类或方法和汉字乱码,这时你要看看他所需要的jar包是否齐全,某些java文件是否与编译是设置的一至。

三、Openfire运行配置点击运行按钮下拉菜单选择“Run Configration”进入如下页面:在“Main”选项卡的的“Probject”中,选择当前项目,如图:这个是整个openfire服务器的总入口,负责启动openfire服务器。

OpenFire 插件开发基础教程

OpenFire 插件开发基础教程

O p e n F i r e插件开发基础教程(总3页)-CAL-FENGHAI.-(YICAI)-Company One1-CAL-本页仅作为文档封面,使用请直接删除OpenFire 插件开发基础教程Openfire是一款优秀的XMPP服务器,而且是开放源码的.大家可以根据自己的需求进行二次开发。

二次开发主要有两种方式:1.修改源代码,2开发openfire插件。

从可扩展性上考虑,自然是开发插件是上策,只有插件无法实现时候才会选择修改源代码。

下面就个人经验,说明一下如何开发openfire插件一、环境基础要有一个配置好的openfire开发环境,这个网络上有比较详细的教程了。

比如《源代码导入eclipse中开发配置指南》和《源码部署及运行》,这时候ant应该是可以正常运行的,先执行openfire 【default】,就生成了openfire的目标代码,再执行plugins,就个生成所以系统自带的插件。

二、目录拷贝打开workspace\openfire_src\src\plugins目录,找一个要修改的插件,我选的是subscription,拷贝生成“subscriptionUF”。

打开src目录,里面有两个文件夹,java就是我们要改的源码,而web里面是修改这个插件所要用的web配置页面,目前用不到,直接删除。

三、修改这个一个xml文件,里面的内容就按照自己的样子更改吧。

最关键是确定<class>,插件所在的类名,既然没有web文件夹了adminconsole也全部注释掉吧.四、修改类和类目录修改src/java里面的目录层次,Class和src/java中的路径必须一致。

五、引入openfire项目右击openfire项目,选择New->Source Folder,在Floder name中选择到刚刚新增的插件目录,注意要选到src/java这一层六、修改类文件SubscriptionPluginUF是完全copy SubscriptionPlugin的,因此有两个类名不符的error修改一下.至此,整个openfire已经把我们新加的SubscriptionPluginUF包含在他的plugins中了,通过控制台也能看到一个仿冒的SubscriptionPluginUF插件七、单独编译插件如果每次都运行plugins,生成所有插件的同时生成我们修改的插件,固然可行,就是慢了一点,插件有什么错误也要找半天。

openfire开发环境搭建

openfire开发环境搭建
Openfire 开发环境搭建
说明: 开发环境(IDE):openfire -3.7.1 +
eclipse-4.2.0
+
jdk-1.7
1. 将 openfire 的源文件拷到 Eclipse 的工作空间中,以源文件名称创建 openfire 的 java 项目
2. 项目有错误是因为 jar 包没有加进来,右键点击项目选择 Properties,java build path-->Libraries 选 卡,Add Jars,选择 openfire 项目 build/lib 下所有的 jar 包,添加
1
3. 此时 project 有错误,下载三个 jar 包:coherence.jar,coherence-work.jar,tangosol.jar,保存在任意文 件夹 4. 在 eclipse 的 Package Explorer 中选中前面建立的 project,右键—>Properties-->java build path-->Libraries 选卡, Add External Jars,选中下载的三个包,完成 5. 此时仍旧有错。源代码中部分 class 继承自 abstract 类,但 abstract 方法没有全部实现,需手动改 正 6. 复制 src/i18n/openfire_i18n_en.properties 和 src/resources/jar/admin-sidebar.xml 两个文件,到项目 下的 bin 目录。 7. 开始用 ant 编译源文件。切换到 ant 视图:菜单栏 ->show view->ant 8. 在 ant 中选 add buildfiles 按钮,在 project 中选 build/build.xml,然后用 ant 编译,直 到编译成功 如果编译出错,是因为 ant 版本不对(太高了)。在 build.xml 中找到下面语段

openfire_plugin开发流程

openfire_plugin开发流程

Openfire插件开发流程1.插件结构:testplugin/|- plugin.xml <-配置文件|- readme.html <-用户说明|- changelog.html <-更新日志|- icon_small.gif <-小图标|- icon_large.gif <-大图标|- src/<-存放编译的类文件夹|- database/<-存放数据库改动|- i18n/<-国际化|- lib/<-插件所需要的类库|- web <-显式调用插件时需要的Web页面|- WEB-INF/|- web.xml <-Web配置|- web-custom.xml <-Web配置|- images/2.加入插件目录文件:在eclipse的openfire项目文件夹openfire_src\src\plugins下手动新建一个插件文件夹,定义名为testplugin,进入文件夹根据需要新建以上文件夹或文件,其中web、i18n、icon、database 都不是必须的,可以只创建src文件夹和plugin.xml文件。

在建立的src文件夹下依次创建文件夹java,org,jivesoftware,openfire,plugin,形成src\plugins\testplugin\src\java\org\jivesoftware\openfire\plugin的目录结构。

在最底层,即plugin文件夹下建立java类,起名为TestPlugin.java。

修改建立好的plugin.xml :<?xml version="1.0" encoding="UTF-8"?><plugin><!—插件主类,必须要的 --><class>org.jivesoftware.openfire.plugin.TestPlugin</class><!—插件信息 --><!—插件名称 --><name>Plugin</name><!—插件描述信息 --><description>Test Plugin</description><!—插件作者 --><author>Aaron</author><!—插件版本 --><version>1.0.0</version><!—插件日期,必须格式为MM/dd/yyyy --><date>12/24/2007</date><!—插件需要的openfire最小版本 --><minServerVersion>3.4.1</minServerVersion><!—插件许可类型--><licenseType>gpl</licenseType><!—Web界面需要配置,没有界面则保留<adminconsole>空标签即可 --><adminconsole><tab id="mytab"name="Example"url="my-plugin-admin.jsp"description="Click to manage..."><sidebar id="mysidebar"name="My Plugin"><item id="my-plugin"name="My Plugin Admin"url="my-plugin-admin.jsp"description="Click to administer settings for my plugin"/> </sidebar></tab></adminconsole></plugin>保存退出。

openfire源码部署心得

openfire源码部署心得

一.部署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_srcMain class 填写:org.jivesoftware.openfire.starter.ServerStarter点击Apply应用。

点击进入Arguments选项卡,在上面那个框(VM arguments:)中填写-DopenfireHome="${workspace_loc:openfire_src}/target/openfire"其中${workspace_loc:openfire_src} 中的 openfire_src 要根据你的项目名来进行同步修改。

Openfire集群部署不完全手册

Openfire集群部署不完全手册

Openfire集群部署不完全手册在csdn和javaeye阅读了无数的技术博客,每一篇都让本人受益匪浅,当然时间久了,很多也都忘了,呵呵。

于是从现在开始自己也尝试着写技术博客,把自己工作与生活遇到的点滴分享给大家,也希望大家阅读了我的博客也能有点滴的收获,那都是对本人最大的鼓励,哈哈!第一次写技术博客,其实不知从何入手,果然如我所想,想把一件技术事件表述清楚是一件很困难的事情。

作为典型的码奴,性格孤僻、不善言辞、老实吧唧一直是我们的通病,但其实很多码奴都怀抱着Coding Changes the World的梦想;可惜在天朝,很多人包括本人,暂时也只能把Coding做为一种纯生存技能,也俗称“搬砖”….好像跑题了……扯淡的话先不多说,现在正式开始了,哈哈!相信很多具有即时通讯功能的项目在架构时,都会了解到Openfire,当然很多有米的公司是直接使用一些服务商提供的即时通讯系统,如环信等。

简简单单来了解下Openfire,Openfire就是实现了XMPP通讯协议的开源即时通讯系统,基于java实现,部署简单,稳定高效,社区活跃,集群方案较成熟、基于插件的扩展性也是相当令人称赞,项目的维护者是相当得负责任,现在也是不断地更新版本中。

咋一说,赶紧去Openfire的官网瞄一眼,版本已经更新到4.0.1了!天啊噜,版本帝,您可别太快啊,公司的项目跟不上您的升级步伐啊….好吧,我们还在用着旧版本…现在开始我们的正题吧,一起来实现Openfire的集群部署。

Openfire集群部署方案使用Openfire的集群插件Hazelcast Clustering Plugin完成openfire的集群部署;并使用Nginx作为整个openfire集群的负责均衡服务器。

集群部署服务器信息我们这次部署的服务器信息如下,这几台服务器都是在同一个局域网下。

当然我没这么多物理机器了,CentOS6.5的服务器都是我安装的虚拟机,你懂得…我们将把两台Openfire的服务器做一个集群;当前还部署了一台前端的负载均衡服务器。

openfire二次开发

openfire二次开发

源码部署及编译1.将openfire源码解压2.将解压后的源码拷贝到Eclipse的工作空间中3.把源码openfire_src文件中build中有个eclipse文件夹,一个settings文件夹和classpath,project两个文件,将他们都复制到和build同级,并从其他项目中拷“.classpath"和".project",这两个文件,都是带点的!然后将eclipse文件夹中拷贝出来classpath,project 两个文件中内容分别替换掉对应.classpath,.project中的内容,就可以把classpath,project 两个文件删除掉了。

4.在Eclipse中导入openfire_src工程此时,会有这样的错误:这是由于缺少jar包引起的:将移除,在build的lib中,将没有build path的jar包Add To Build Path5.完成上部操作后,会有下面的错误:添加jar包,Add To Build Path 此时会有下面的错误实现借口中的方法即可将build—>lib下的jar包build path 6.编译7.运行选中项目,右键—>Run As—>Run Configuratios点击Search,输入ServerStarter选中Arguments选项卡,在VM arguments中填入-DopenfireHome="${workspace_loc:openfire_src}/target/openfire" ****千万注意DopenfireHome前面有个“-”选中Classpath选项卡,选中User Entries,点击右边的Advanced按钮选择Add Folder添加src/i18n 确定选择Add Folder添加resources/i18n 确定选择右侧的Advanced…–>选择Add Folderbuild/lib/dist 确定选择右侧的Advanced…–>选择Add Foldersrc/resources/jar 确定点击Apply,Run集群说明:如果使用源码做集群,则需要将src/plugins/clustering/src/java整个包删除,否则与hazelcast有冲突1.所有集群的域必须相同2.安装Hazelcast Clustering Plugin3.进入plugins—>hazelcast—>classes打开hazelcast-cache-config.xml文件,修改<network>下的代码为:<port auto-increment="true">5701</port><join><multicast enabled="false" /><tcp-ip enabled="true"><member>192.168.1.5</member><member>192.168.1.16</member><member>192.168.1.17</member></tcp-ip><aws enabled="false"/></join>或者:<join><multicast enabled="false" /><tcp-ip enabled="true"><member>192.168.1.5:5701</member><member>192.168.1.16:5701</member><member>192.168.1.17:5701</member></tcp-ip><aws enabled="false"/></join>4.重启服务器,点击Clustering查看集群中的节点重置openfire:将conf下的openfire.xml文件中的<setup>true</setup>删掉,重新进入http://localhost:9090进行配置即可Nginx负载均衡首先将pcre-8.34.tar.gz、zlib-1.2.8.tar.gz、nginx-1.7.3.tar.gz、nginx_tcp_proxy_module-master.zip 上传到linux系统中安装make:yum –y install gcc automake autoconf libtool make安装g++:yum install gcc gcc-c++安装pcre库将下载的pcre库解压,移动到usr/local/src目录中(这个目录可以随便指定)cd pcre-8.34./configuremakemake install安装zlib库将下载的zlib库解压,移动到usr/local/src目录中(这个目录可以随便指定)cd zlib-1.2.8./configuremakemake install安装openssl:yum –y install openssl openssl-develnginx默认只支持http负载均衡,为了让nginx支持tcp负载均衡,还需要https:///yaoweibin/nginx_tcp_proxy_module这个项目。

linux的openfire运行日志配置经历

linux的openfire运行日志配置经历

linux的openfire运行日志配置经历openfire的日志可以通过/usr/openfire/lib/log4j.xml(与openfire的安装目录有关,我的openfire是安装在/usr/openfire/)的xml配置文件进行设定logs文件的位置,但是我在对openfire的进行日志文件配置后(通过设定openfireHone环境变量值export openfireHome=/usr/openfire),一直无法在/usr/openfire/logs/目录下生成info.log、debug.log、error.log、warn.log几个日志文件,直到昨天才发现在日志文件生成在根目录下的logs文件夹即/logs/。

网上说openfireHome的环境变量值,但实际上我已经在/etc/profild 中设置了export openfireHome=/usr/openfire环境变量值。

但是openfire运行时,{$openfireHome}的值为空的,${openfireHome}/logs/debug.log替换后变成/logs/debug.log。

为了让日志文件生成在/usr/openfire/logs中,我测试了两种实现方式。

•设定相对路径把<param name="File" value="${openfireHome}/logs/debug.log" />中的值改为<param name="File" value="../logs/debug.log" />,以此类推。

•设定绝对路径把<param name="File" value="${openfireHome}/logs/debug.log" />中的值改为<param name="File" value="/usr/logs/debug.log" />,以此类推,不过个人不建议设定成绝对路径,还是使用相对路径实现。

openfire源码分析

openfire源码分析

openfire源码分析启动流程Socket接⼝Socket通信使⽤Mina框架实现,是XMPP协议的处理⼊⼝,具体为:消息接收后由不同的节处理器处理:StanzaHandler基础消息类型,之后进⾏消息路由:最后通过路由表进⾏路由:Http接⼝Http接⼝⽤于Web端的管理以及Web客户端的通信,使⽤jetty实现。

通过XMPServer启动ConectionManager来管理链接启动,包括SSL,HTTP,TCP等。

消息处理流程消息发送消息的发送通过NIOConnection.deliver(Packet packet)实现。

模块功能列表启动模块RoutingTableImpl/*** Routing table that stores routes to client sessions, outgoing server sessions* and components. As soon as a user authenticates with the server its client session* will be added to the routing table. Whenever the client session becomes available* or unavailable the routing table will be updated too.<p>** When running inside of a cluster the routing table will also keep references to routes* hosted in other cluster nodes. A {@link RemotePacketRouter} will be use to route packets* to routes hosted in other cluster nodes.<p>** Failure to route a packet will end up sending {@link IQRouter#routingFailed(JID, Packet)},* {@link MessageRouter#routingFailed(JID, Packet)} or {@link PresenceRouter#routingFailed(JID, Packet)} * depending on the packet type that tried to be sent.** @author Gaston Dombiak*/AuditManager/*** Manages and directs server message auditing behavior. Turning on* all auditing options can produce copious amounts of data and* significantly slow the server as it saves the data to persistent storage.<p>** Auditing currently saves audit data to a raw XML file* which can later be processed and mined for information.** @author Iain Shigeoka*/RostManager/*** A simple service that allows components to retrieve a roster based solely on the ID * of the owner. Users have convenience methods for obtaining a roster associated with * the owner. However there are many components that need to retrieve the roster* based solely on the generic ID owner key. This interface defines a service that can * do that. This allows classes that generically manage resource for resource owners * (such as presence updates) to generically offer their services without knowing or* caring if the roster owner is a user, chatbot, etc.** @author Iain Shigeoka*/PluginManager/*** Loads and manages plugins. The <tt>plugins</tt> directory is monitored for any* new plugins, and they are dynamically loaded.** <p>An instance of this class can be obtained using:</p>** <tt>XMPPServer.getInstance().getPluginManager()</tt>** @author Matt Tucker* @see Plugin* @see org.jivesoftware.openfire.XMPPServer#getPluginManager()*/核⼼模块PresenceManagerImpl/*** The presence manager tracks on a global basis who's online. The presence* monitor watches and reports on what users are present on the server, and* in other jabber domains that it knows about. The presence manager does* not know about invisible users (they are invisible).** @author Iain Shigeoka*/SessionManager/*** Manages the sessions associated with an account. The information* maintained by the Session manager is entirely transient and does* not need to be preserved between server restarts.** @author Derek DeMoro*/PacketRouterImpl/*** A router that handles incoming packets. Packets will be routed to their* corresponding handler. A router is much like a forwarded with some logic* to figute out who is the target for each packet.** @author Gaston Dombiak*/IQRouter/*** Routes iq packets throughout the server. Routing is based on the recipient* and sender addresses. The typical packet will often be routed twice, once* from the sender to some internal server component for handling or processing, * and then back to the router to be delivered to it's final destination.** @author Iain Shigeoka*/MessageRouter/*** <p>Route message packets throughout the server.</p>* <p>Routing is based on the recipient and sender addresses. The typical* packet will often be routed twice, once from the sender to some internal* server component for handling or processing, and then back to the router* to be delivered to it's final destination.</p>** @author Iain Shigeoka*/PresenceRouter/*** <p>Route presence packets throughout the server.</p>* <p>Routing is based on the recipient and sender addresses. The typical* packet will often be routed twice, once from the sender to some internal* server component for handling or processing, and then back to the router* to be delivered to it's final destination.</p>** @author Iain Shigeoka*/MulticastRouter将⼀个包路由到多个⽬的地址,包括远程地址,但只获取深度为1的地址。

openfire插件编译及部署

openfire插件编译及部署

Openfire插件编译及部署插件编译1、编译参数配置打开eclipse或者Myeclipse,点击菜单栏里的run选项,在其下拉菜单中选择External Tools按钮,在它的下一级菜单中点击External Tools Configuration即可进入配置页面。

如图1所示。

图1图2所示为配置页面。

图2选择左侧导航栏中的Ant Build选项,点击新建按钮来新建一个编译配置。

如图3所示。

图3接下来就可以来配置插件的编译参数了。

首先,在Name框中为该编制配置项命名以示区别,如图4所示:图4其次,打开Main选项卡,点击在Buildfile框下面Browse Workspace按钮,来选择用来编译插件的Build文件,它的目录是openfire/build/build.xml。

如图5所示。

图5完成后框内显示数据为“${workspace_loc:/openfire/build/build.xml}”,如图6所示。

图6再填写Arguments框,内容格式为“-Dplugin=XXXX”,其中“XXXX”是我们要编译的插件名。

完成后如图7所示。

图7打开Targets勾选plugin,若编译所有插件就勾选plugins,完成后如图8所示。

图8再打开Common选项卡,设置编译的编码格式一般为UTF_8格式。

完成后如图9所示。

图9最后点击按钮保存设置,点击就可对插件进行编译。

2、检查编译结果当控制台出现编译成功的结果时,即代表编译已经完成,如图10所示。

图10在openfire/target/plugins目录,出现对应的插件jar文件,就代表编译成功了!如图11所示。

图11最后,将编译好的插件jar文件复制出来,以备上传导服务器。

插件部署首先,访问openfire服务器的管理控制台,URL是http://服务器IP:9090。

输入管理员用户名和密码。

如图12所示。

图12登录进入后,选择“插件”网页中机会显示服务器目前所安装的所有插件,如图13所示。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

开发环境(IDE):Eclipse 3.3.2+JDK1.6+Ant(内置)+Openfire_src_3_5_1.zip 1. 获取Openfire 3.5.1源代码官方主页:/ (1)从官方网站上直接下载官方发布版本的源代码Openfire_3_5_1.zip源代码压缩包;但是,2008年4月24官方发布的源代码中使用了import testng.xxx语句,所以额外需要下载并导入testng-5.8-jdk15.jar类库。

否则会提示错误信息。

(2)也从官方网站上可以下载最新版(nightly builds),如源代码压缩包openfire_src_2008-05-31.zip (3)使用Eclipse的版本控制插件SVN获取(检出为),具体步骤为:* 在eclipse中,选择Windows->Open Perspective->Other * 在弹出的窗口中,选择SVN Repository Exploring, 然后点OK * 在SVN Repositories 视图中单击右键,选择 New->Repository Location... *在弹出的New Repository Location对话框的输入URL文本框中输入:/svn/repos/openfire/trunk 然后,单击Finish. 你将会看到页面中出现URL地址* 展开URL地址与openfire树形结构* 在trunk上点击右键,选择Check Out(检出为),即可将源代码保存到您所指定的目录下。

* 用Create project from existing source新建工程,注意工程名要用openfire。

4. 创建openfire 工程将openfire_src_3_5_1.zip解压后,目录下除了READEME.html、LICENSE.html和changelog.html三个网页文件之外,有下面四个子目录。

build目录:build目录下收录的是生成安装文件(例如:rpm)所要的一些文件,例如JRE等。

resources目录:resources 目录下收录的是一些为实现国际化(i18n)和本地化的一些编码文件(例如:英文,中文,法文,德文等)。

documentation目录:documentation目录下收录的是一些关于Openfire 安装和配置的信息,但最终要的是这里有Openfire开发的Javadoc。

src目录:这个src文件夹就是我们想要的Openfire源代码了,这下面又有许多文件夹,我们只要Java文件夹就好,这里面实现的Openfire的核心功能,通过它就可以调试Openfire。

(1)从现有资源新建项目:File->New->Java Project,在弹出的New Java Project对话框中输入工程名:openfire(注意工程名要用openfire,因为源代码默认的工程名是openfire),选择Create project from existing source项,单击Browe,找到当前工作空间目录(\workspace 目录)下存放源代码的openfire文件夹。

(推荐初学者使用这样方法,因为编译、打包、调试等已经做好,可以直接使用)(2)如果您是做二次开发,为了定制自己的服务器端,就可以采用这样方法:* 新建工程:File->New->Project->Java Project,单击Next,在Project name 文本框中输入工程名:openfire,单击Finish * 解压后得到的openfire_src_3_5_1\src目录下所有内容复制到新建的工程目录workspace\openfire下* 在Package Explorer视图中,右击openfire工程,选择Properties,在弹出的对话框中选择Libraries->Add JARs..,把openfire_src_3_5_1/build/lib目录下的*.jar类库全部添加进来;选择Source标签页,Add Folder..,选中src/java目录前的复选框,点击OK,点击OK按钮。

(在 Eclipse中将此Java文件夹当成源代码文件夹新建工程,建立新工程后观察Openfire所import的包,发现Openfire用了许多开源工具,而这些库都在上文提到的Build目录的lib目录下,将Openfire 用到的库都添加到这个新建工程的Referenced Libraries中。

或者如果这样一个一个添加比较麻烦的话还有一个方法就是从你安装好的Openfire服务器目录下的lib目录中(例如:”D:\Program Files\Openfire\lib”或“/usr/local/openfire/lib”)找到openfire.jar,打开后将里面的org /jivesoftware删除,重新打包成jar并添加到这个新建工程的Referenced Libraries中,这样就可以省去了很多类似的工作。

)但是这样新建的openfire项目没有打包部署,需要开发者自己完成相应的工作。

注意:新建工程之后,可能会出现一些警告信息,下面对此予以说明:对于警告信息,是没有关系的。

因为这些警告信息是使用1.5以上版本 JDK时候才出现的,使用JDK1.4是不会出现这些警告信息的。

因为这些代码中的有些是使用JDK 1.4编写的,而JDK1.4不支持泛型,而JDK 1.5和JDK1.6是支持泛型的。

这些警告信息主要是提示将这些非泛型的代码修改为更加高级的方法——泛型,所以这些警告信息是不影响代码结果的。

如果需要修改为泛型也是可以,使用泛型来处理相关的集合类。

5. 编译工程openfire是用ant构建的,所以要先设置使得eclipse中每次编译都使用内置的ant工具,保证编译的正确执行。

同时,要在Eclipse中设置为使用JDK作为JVM,如果使用JRE作为JVM,编译就会失败。

因为openfire在Windows下是使用install4j打包成.exe格式的安装文件的,所以需要安装install4j。

否则,在使用ant进行编译的时候,在ant视图中可能会出现警告如下信息:taskdef class com.install4j.install4jtask cannot found。

这主要是要安装用来打包Java应用程序的install4j.exe程序,而且将要安装到其默认的安装路径C:\Program Files\install4j下。

(1)在eclipse中点击Window->Show View->Ant,打开Ant窗口;(2)在Ant 视图中,单击右键,在弹出的快捷菜单中选择Add Buildfiles..;(3)在弹出的对话框中,展开openfire/build文件夹,选择build目录下的build.xml,点击OK;(4)在Ant视图中, 展开Openfire XMPP Server,双击 openfire(default)编译工程(5)如果在Console视图中显示“BUILD SUCCESSFUL”就表示编译成功。

7. 创建项目Builder (1)在eclipse的菜单栏中,选择Run->Open Run Dialog...,在弹出的对话框左侧的树形结构中选择Java Application,单击右键,选择New创建启动配置。

(2)在Run窗口的Main选项卡中, 修改Name文本框中的值,改成包含要启动的类的工程名openfire(3)在Run窗口的Main选项卡中,点Browse按钮,选择openfire(4)在Run窗口的Main选项卡中,点Search按钮,选择Main class为org.jivesoftware.openfire.starter.ServerStarter,单击Apply 按钮。

(这是openfire的启动类)(5)点击进入Arguments选项卡,在VM arguments文本框中输入-DopenfireHome="${workspace_loc:openfire}/target/openfire" 单击Apply按钮。

这个是用于eclipse执行java命令时传递的参数,这样openfire程序可以通过System.getProperty(“openfireHome”)得到openfire的本地位置。

(6)点击进入 Classpath 选项卡,选中User Entries,这样Advanced...就处于可用状态;点击Advanced...按钮,在Advanced Options页面,选择Add Folders, 单击OK。

(默认情况下,已经将工程openfire 添加到了这里,而不需要进行该项操作,如果有多个工程的时候才需要执行该项操作。

)选择openfire\src\i18n, 点OK按钮将这个文件夹加入到Classpath选项卡中;同样的方式把openfire\src\resources目录下的jar文件夹也加到Classpath选项卡中。

(11)在Common 选项卡中,勾选Run复选框,单击Apply按钮。

设置完毕,这样以后在run这个工程的时候就会按照正确的配置进行了,debug的设置和run的设置类似,不再多说。

8. 运行并测(1)在Eclipse菜单中,单击Run->Run(或快捷方式Ctrl+F11),试编译结果(openfire服务器)在Console试图中出现如下所示的信息。

(2)在Web浏览器中,输入http://127.0.0.1:9090/,如果可以出现配置的openfire的页面,就表示openfire编译、运行成功。

9. 自己定制openfire服务器时,在Eclipse对openfire源代码进行部署参考网址:/racingtom/archive/2007/09/27/1803908.aspx openfire的起始类为org.jivesoftware.openfire.starter.ServerStarter.java,但是直接运行此类却有问题,因为此类是针对Openfire安装包而设计的,此类的功能是将所用到的JAR文件解压并将class文件加载到虚拟机中,而我们要用的却是源代码中我们自己编译好的class文件。

所以,我们需要一个新的启动类。

(1)一个简单的实现方法就是把src/java下的东西复制到我创建的java project下的src里了,并修改org.jivesoftware.openfire.starter包中ServerStarter.java 类的源代码,具体如下(当然最好是与ServerStarter.java中的方法一样,用自定义的ClassLoader来将 XMPPServer.class加载到虚拟机中)package org.jivesoftware.openfire.starter; import org.jivesoftware.openfire.XMPPServer; public class StandaloneStarter { public static void main(String[] args) { XMPPServer serve r = new XMPPServer(); } } 这样程序就可以跑起来了,最后的问题就是配置文件路径的问题。

相关文档
最新文档