前言

在开发Openfire插件前需要构建完成服务器源码编辑环境,具体操作步骤请参照Openfire服务器源码编译的了解。

开发简单的Openfire插件

1、已构建完成的Openfire源码结构如下:

2、查看已有的插件结构,并生成自己的插件结构,转到Navigator视图下

已有插件目录结构

参照已有目录结构,创建自己的目录结构,在plugins目录邮件->New->Folder

3、在新建的simplePlugin目录右键->New->Folder

4、在切换至Package Explorer视图,在simplePlugin->src->java->右键->Build Path->Use as Sorurce Folder

结构如下:

5、创建插件类实现Plugin接口,在initializePlugin\destroyPlugin方法中,分别负责初始化插件和销毁插件

package org.jivesoftware.openfire.plugin;

import java.io.File;

import org.jivesoftware.openfire.container.Plugin;
import org.jivesoftware.openfire.container.PluginManager; public class SimplePlugin implements Plugin { private static PluginManager pluginManager; @Override
public void initializePlugin(PluginManager manager, File pluginDirectory) {
pluginManager = manager;
System.out.println("加载插件成功!");
} @Override
public void destroyPlugin() {
System.out.println("销毁插件成功!");
} }

6、从别的插件包下复制一个plugin.xml到simpleplugin文件夹下

plugin.xml内容如下

<?xml version="1.0" encoding="UTF-8"?>
<plugin>
<!--类的全包名-->
<class>org.jivesoftware.openfire.plugin.SimplePlugin</class>
<!--插件名称-->
<name>SimplePlugin</name>
<!--描述信息-->
<description>this is a SimplePlugin</description>
<!--作者信息-->
<author>Gm</author>
<!--版本信息-->
<version>1.0.0</version>
<!--创建、修改信息-->
<date>20/6/2017</date>
<!--最低兼容版本的openfire-->
<minServerVersion>4.2.3</minServerVersion>
</plugin>

7、从Window->show view->Ant,打开Ant视图,在Ant视图中,右键添加ant builder

8、在Ant视图中,展开Ant的节点,然后找到plugins,在pluins上右键Run As Ant Builder

至此,插件开发编译完成,到openfire_src\target\openfire\plugins下,找到生成的插件jar包,这就是生成的插件包,可以放在openfire服务器的plugins目录下,启动后就可以运行了

补充:本机默认编码为GBK,编译插件的时候出现以下错误:编码UTF8的不可映射字符

解决方案:

在build.xml头添加encoding="GBK",将javac encoding="utf8"改为encoding="GBK"

XMPP即时通讯协议使用(五)——搭建简单的Openfire插件的更多相关文章

  1. XMPP即时通讯协议使用(六)——开发Openfire聊天记录插件

    转载地址:http://www.cnblogs.com/hoojo/archive/2013/03/29/openfire_plugin_chatlogs_plugin_.html 开发环境: Sys ...

  2. XMPP即时通讯协议使用(前传)——协议详解

    XMPP详解 XMPP(eXtensible Messaging and Presence Protocol,可扩展消息处理和现场协议)是一种在两个地点间传递小型结构化数据的协议.在此基础上,XMPP ...

  3. XMPP即时通讯协议使用(十二)——基于xmpp搭建简单的局域网WebRTC

    创建HTML和JS ofwebrtc.html <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" ...

  4. XMPP即时通讯协议使用(七)——利用Strophe实现WebIM及strophe.plugins插件使用

    Strophe简介与Openfire配置 Strophe.js是为XMPP写的一个js类库.因为http协议本身不能实现持久连接,所以strophe利用BOSH模拟实现持久连接. 官方文档: http ...

  5. XMPP即时通讯协议使用(十)——好友关系状态

    sub  ask  recv 订阅 询问 接受 含义 substatus -1-  应该删除这个好友          Indicates that the roster item should be ...

  6. xmpp即时通讯协议的特性---长处和缺点!

    xmpp协议的定义? XMPP是一种基于标准通用标记语言的子集XML的协议,它继承了在XML环境中灵活的发展性. 因此.基于XMPP的应用具有超强的可扩展性.经过扩展以后的XMPP能够通过发送扩展的信 ...

  7. XMPP即时通讯协议使用(四)——Openfire服务器源码编译与添加消息记录保存

    下载Openfire源码 下载地址:https://www.igniterealtime.org/downloads/index.jsp,当前最新版本为:4.2.3 Eclipse上部署Openfir ...

  8. XMPP即时通讯协议使用(三)——订阅发布、断开重连与Ping

    package com.testV3; import java.util.List; import org.jivesoftware.smack.ConnectionListener; import ...

  9. XMPP即时通讯协议使用(十三)——获取当前在线用户或关闭指定用户

    1.开启REST API插件或根据需求修改其插件源码: 2.添加服务器->服务器管理->系统属性中添加 plugin.restapi.enabled=true 3.pom依赖 <de ...

随机推荐

  1. sysbench github & manual

    sysbench github https://github.com/akopytov/sysbench sysbench-manual.pdf https://github.com/mrivandu ...

  2. php io

    1.获取目录下文件,不包括子目录 //获取某目录下所有文件.目录名(不包括子目录下文件.目录名) $handler = opendir($dir); while (($filename = readd ...

  3. Atcoder2134 Zigzag MST

    问题描述 We have a graph with N vertices, numbered 0 through N−1. Edges are yet to be added. We will pro ...

  4. Linux find过滤掉没有查看权限的文件

    参考:https://blog.csdn.net/sinat_39416814/article/details/84993424 https://www.jianshu.com/p/2b056e1c0 ...

  5. spring security 权限框架原理

    spring security 权限框架原理

  6. 如何添加筛选器 (Reporting Services)

    如果您希望在计算或显示时包含或排除特定值,可向数据集.数据区域或组添加筛选器.在运行时应用筛选器的顺序为:先对数据集,再对数据区域,最后对组,并按照组层次结构自上而下的顺序.在表.矩阵或列表中,对行组 ...

  7. 匈牙利算法&模板O(mn)HDU2063

    #include<cstdio> #include<cstring> #define maxn 510 using namespace std; int k,g,b,x,y,a ...

  8. Airtest断言方法

    1,第一种断言方式:验证UI界面 a.存在 b.不存在 2,断言第二种方式:验证数值 assert_equal:断言相等 assert_not_equal:断言不等 3,我发现Airtest一个bug ...

  9. C# 调用delphi编写的dll

    技术实现 如何逐步实现动态库的加载,类型的匹配,动态链接库函数导出的定义,参考下面宏定义即可: #define LIBEXPORT_API extern "C" __declspe ...

  10. field.getModifiers() 返回值

    field.getModifiers() 返回值 public static final  的值是 25 private 的值是2  测试如下 Class clazz=MyModel.class; F ...