项目准备

参考:http://www.yunliaoim.com/im/866.html

我们可以在源码目录的plugins下新建一个maven插件module,当然,也可以新建一个project去开发插件,我这里为了看代码、调试方便直接在源码的插件目录下新建了。父模块和其它的一些配置参考源码自带的openfire-plugin-assembly-descriptor插件。或者到官方代码库Ignite Realtime · GitHub找一些插件作为参考即可。

自定义插件,需要满足以下基本要求:

  • 根目录下要包含:plugin.xml

  • 根目录下包含一个java源码文件夹,同时要有一个实现了org.jivesoftware.openfire.container.Plugin 接口的java类。

我们这个插件实现openfire Server启动和关闭时,在控制台打印出消息。changelog.html、plugin.xml、readme.html这三个文件分别是你的插件修改日志文件,插件文件和自述文件。logo_small.gif,logo_large.gif是插件显示的图标(从别的插件随便拷贝过来好了),新建这几个文件,暂时留空。

插件类

新建插件类,插件简单的在初始化和销毁时打印一些简单的信息。通过pom的依赖关系可以看到父插件依赖了xmppserver,所以是可以直接使用xmppserver相关的接口了。

package com.nufront.openfire.plugin;
​
import org.jivesoftware.openfire.XMPPServer;
import org.jivesoftware.openfire.container.Plugin;
import org.jivesoftware.openfire.container.PluginManager;
​
import java.io.File;
​
/*** @author kangming.ning* @date 2020/8/26 16:38*/
public class HelloWorldPlugin implements Plugin {
​private XMPPServer server;
​@Overridepublic void initializePlugin(PluginManager manager, File pluginDirectory) {server = XMPPServer.getInstance();System.out.println("HelloWorldPlugin----start");System.out.println(server.getServerInfo());}
​@Overridepublic void destroyPlugin() {System.out.println("HelloWorldPlugin----destroy");}
}

plugin配置

编写根目录下plugin.xml的内容,内容如下,adminconsole是配置插件关联的页面,这里不需要。

<?xml version="1.0" encoding="UTF-8"?>
​
<plugin><class>com.nufront.openfire.plugin.HelloWorldPlugin</class><name>helloWorld</name><description>First Openfire Custom Plugin.</description><author>ningkangming</author><version>1.0.0</version><date>26/08/2020</date><minServerVersion>4.5.3</minServerVersion><adminconsole></adminconsole>
</plugin>

编译安装插件

直接maven打成jar包还不可以用,因为没把plugin.xml打包进去,并且openfire插件的目录结构还得按规定,比如插件的jar得在lib目录下。接下来修改我们的插件pom,将相关资源打包进去。参考:https://www.twblogs.net/a/5eac125e6052e15026732da3,关键是添加如下配置

   
 <build><!-- 插件打包后的jar包名称--><finalName>helloworld</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><includes><!-- 只在jar里面放class文件 --><include>**/com/nufront/openfire/plugin/**</include></includes><outputDirectory>${project.build.directory}</outputDirectory></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><executions><execution><phase>install</phase><goals><goal>resources</goal></goals></execution></executions><configuration><resources><resource><directory>${project.basedir}</directory><filtering>true</filtering><includes><include>changelog.html</include><include>readme.html</include><include>plugin.xml</include><include>logo_large.gif</include><include>logo_small.gif</include></includes></resource><resource><directory>${project.basedir}/src/main/web</directory><targetPath>web</targetPath></resource></resources></configuration></plugin><plugin><!-- ant插件, 這個最重要了, 以上三個插件只是能夠零散的把文件編譯並放在target文件夾下,我使用ant插件, 把文件整理起來, 並壓縮到指定的jar裏面 --><artifactId>maven-antrun-plugin</artifactId><version>1.3</version><executions><execution><!-- 調用階段 --><phase>install</phase><goals><!-- 目標(命令) --><goal>run</goal></goals><configuration><tasks><echo message="開始構建插件包..."></echo><copy todir="${project.build.directory}/${project.build.finalName}-final/lib" overwrite="true" file="${project.build.directory}/${project.build.finalName}.jar"></copy><copydir dest="${project.build.directory}/${project.build.finalName}-final/" src="${project.build.directory}/classes/" excludes="org/**"></copydir><jar basedir="${project.build.directory}/${project.build.finalName}-final/" destfile="${project.build.directory}/${project.build.finalName}-final.jar"></jar><delete dir="${project.build.directory}/${project.build.finalName}-final/"></delete></tasks></configuration></execution></executions></plugin>
​</plugins></build>

把插件通过管理界面把helloworld-final.jar加载后可以发现正常加载,启动和关闭会把相关信息打印。(注意,打包用mvn install,用xx-final.jar)

openfire插件开发流程相关推荐

  1. WPS插件开发流程(2)

    上一篇文章WPS插件开发流程(1)中,我们详细讲了如何在Visual Studio中如何创建插件.在WPS中显示插件的方法.今天我们完成剩下的部分,讲解如何导出PIA.DLL强签名.打包安装文件夹的方 ...

  2. Fastadmin插件开发流程简要记录

    Fastadmin插件开发简易流程 Step1 使用命令行创建插件 Step2 更改插件信息 Step3 编辑插件相关数据库脚本 Step3 编辑插件的配置 Step4 为插件配置后台管理菜单 Ste ...

  3. openfire 插件开发

    1. 在上一篇博文中,我介绍了Openfire3.9.3源代码导入eclipse中开发配置指南后,在这篇博文中,我介绍一下openfire插件的开发,因为在很多使用openfire的过程中,需要更改o ...

  4. Openfire插件开发

    注意: Openfire生成插件的jar不是像Spark一样通过build.xml生成 而是在命令行 ant plugins 实现生成插件的 这篇生成插件的方法很好 我看到最好的 http://blo ...

  5. jira的插件开发流程实践

    怎么开头呢,由于自己比较懒,博客一直不怎么弄,以后克己一点,多传点自己遇到的问题和经历上来,供自己以后记忆,也供需要的小伙伴少走点弯路吧 最近公司项目需要竞标一个运维项目,甲方给予了既定的几种比较常用 ...

  6. UE4 插件开发流程与插件打包问题

    首先是官网的关于插件的内容 http://api.unrealengine.com/CHN/Programming/Plugins/index.html 然后是插件开发的流程视频,跟着做下来,简单的蓝 ...

  7. 搜狗浏览器插件开发流程

    流程: 1.注册搜狐通信证账号:http://ie.sogou.com/open/ 2.阅读开发文档: http://ie.sogou.com/open/doc/ (1)搜狗浏览器的插件api设计借鉴 ...

  8. openfire插件开发的四种方式

    openfire 的插件可以访问所有openfire的API.这给我们的插件实现提供了巨大的灵活性.以下提供了四种比较常用的插件集成方式. 1.Register a plugin as a Compo ...

  9. openfire 插件开发例子

    2019独角兽企业重金招聘Python工程师标准>>> 好久都没有写东西了.今天总结一下之前开发的一些openfire插件. 这次的插件需要提供一个HTTP的接口.通过HTTP来对o ...

最新文章

  1. Android——学习:线性布局权重分配
  2. Linux项目零散笔记
  3. vue 定义全局弹框_VUE路由拦截:Vue自定义全局弹窗组件
  4. 使用VS2008开发及部署Excel AddIn 心得
  5. 手把手教你如何成为大牛
  6. NLP基础|中英文词向量评测理论与实践
  7. Zend Framework实例教程三
  8. linux ps axo,Linux shell-场景篇
  9. python制作二维码
  10. [spring] 源码简析 如何解决循环依赖?
  11. CSS 动画指南: 原理和实战 (一)
  12. JSP电子病历管理系统
  13. win10 安装sqlserver2000
  14. 如何将密切好友的微信聊天记录恢复到自己的微信中
  15. 如何查看电脑里的隐藏文件?
  16. windows打开iis7服务器远程桌面管理器
  17. 计算机主机声音怎么办,电脑主机声音大,详细教您电脑主机声音大怎么办
  18. JAVA:实现RodCutting棒材切割问题算法(附完整源码)
  19. linux程序卸载失败怎么办,在Deepin下卸载LibreOffice等软件的方法,附卸载失败的原因...
  20. PyQt5 --- 进度条拖动点击视频播放

热门文章

  1. window.speechSynthesis.speak 不能自动执行问题
  2. Golang 中通过 cgo 调用 C++ 的动态库的功能封装
  3. 如何释放你的创造力?
  4. 自学3Dmax可以吗?难不难?9年老建模师的职业心得
  5. 小马哥----高仿三星i8552机型刷机 6572芯片 系统为4.22 移植测试完美救机
  6. 软件设计(四)--MTBF、MTTF、MTTR
  7. Rocksdb Compaction原理
  8. android 不定时搜不到蓝牙广播,找不到带有Android Studio BroadcastReceiver的蓝牙设备吗?...
  9. 使用threejs简单Web3D效果
  10. Android 进度条Demo