Spark IM 插件开发环境搭建

网上这方面的资料好少哦,官方的文档也很久没有更新了,走了不少弯路 T_T,新手入门,高玩见谅~

准备工作

Sparkplug Kit下载:sparkplug_kit_2_0_7.zip

Sparkplug Kit文档:Development Guide

官方demo 插件Jar:examples.jar

这个jar解压后,配合docs看,有里面的demo的源码

还有就是之前搭建好的源码开发环境,编译成功的target文件夹(很重要...因为这个sparkplug_kit开发环境是很老的spark版本...)

文库里面一个doc中文版:http://wenku.baidu.com/view/7a8c04c9d5bbfd0a79567350.html

环境搭建

1、创建Project

创建一个叫Sparkplug的JavaProject

将 sparkplug_kit_2_0_7.zip 解压出来目录下的 builder、spark文件夹拷贝到这个项目的目录下

将之前spark源码开发环境编译成功后的 target/build 下的文件夹替换当前项目 Sparkplug/spark/ 目录下的所有文件(删除之前的先,不是合并)

2、设置属性

右键项目,设置Properties,Java Build Path

Source:选择Sparkplug/builder/src

Libraries:导入Sparkplug/spark/lib 下的所有jar

HelloWorld

1、写一个demo

新建一个包目录,com.mypackage,然后创建一个MyPlugin.java 的Class(默认路径,这样建立后配置文件基本不用改了,后面会说)

实现Plugin接口

1public class MyPlugin implements Plugin { 2 3    /** 4     * Called after Spark is loaded to initialize the new plugin. 5     * 初始化事件 6     */ 7 @Override 8 public void initialize() { 9     System.out.println("——————————Welcome To Spark———————————"); 10         addTabToSpark(); 11 } 12 13    /** 14     * Called when Spark is shutting down to allow for persistence of information 15     * or releasing of resources. 16     * 关闭事件,以便对信息的持久化或释放资源 17     */ 18 @Override 19 public void shutdown() { 20     System.out.println("——————————shutdown———————————"); 21 22 } 23 24    /** 25     * Return true if the Spark can shutdown on users request. 26     * @return true if Spark can shutdown on users request. 27     * 是否允许用户直接关闭 28     * 返回 是否允许 29     */ 30 @Override 31 public boolean canShutDown() { 32 33     return false; 34 } 35 36    /** 37     * Is called when a user explicitly asked to uninstall this plugin. 38     * The plugin owner is responsible to clean up any resources and 39     * remove any components install in Spark. 40     * 删除插件事件 41     * 清除资源文件、组件等等 42     */ 43        @Override 44        public void uninstall() { 45 46        } 47 48    /** 49     * 将我自己的标签到Spark工作空间 50     */ 51    private void addTabToSpark(){ 52     System.out.println("——————————addTabToSpark———————————"); 53        // 从 SparkManager(Spark管理器) 获取 Workspace UI(主界面) 对象 54        Workspace workspace = SparkManager.getWorkspace(); 55        // 从 Workspace UI 对象获取 SparkTabbedPane(底部Tab栏) 对象 56        SparkTabbedPane sparkTabbedPane = workspace.getWorkspacePane(); 57        // 添加自定义Tab 58        sparkTabbedPane.addTab("我的标签", null, new JButton("哈哈")); 59    } 60     61}

可以看到,我们需要实现

initialize()、shutdown()、canShutDown()、uninstall() 四个方法

前2个很好理解,canShutDown()目前还没弄清楚是干嘛的...-_-#,uninstall()还没用到过。

总之先来个最简单的例子创建一个自己的标签。

2、配置文件

打开Sparkplug/builder 目录下的 plugin.xml 文件

1<!-- Define your plugin --> 2<plugin> 3    <!-- 插件的名称 --> 4    <name>My Plugin</name> 5    <!-- 插件的版本 --> 6    <version>1.0</version> 7    <!-- 插件的作者 --> 8    <author>Don Juan</author> 9    <!-- 关于该插件更多信息的地址 --> 10    <homePage>http://www.jivesoftware.org</homePage> 11    <!-- 邮箱地址 --> 12    <email>donjuan@jivesoftware.com</email> 13    <!-- 插件的描述 --> 14    <description>This is my first cool Spark Plugin.</description> 15    <!-- 类路径 --> 16    <class>com.mypackage.MyPlugin</class> 17    <!-- 允许该插件最小的Spark版本号,如果Spark的版本号比需要的小,则插件不会被启动 --> 18    <minSparkVersion>2.0.0</minSparkVersion> 19</plugin>

如果你的包结构是这样的话,就不用改了,如果不一样请修改<class>标签下的路径

3、打包

打开sparkplugs/builder/build 下的 build.xml

1<project name="sparkplug" default="jar" basedir=".."> 2 3    <property name="plug.dir" value="${basedir}/."/> 4    <property name="plug.lib.dir" value="${plug.dir}/lib"/> 5 6    <property name="classes.dir" value="${basedir}/build/classes"/> 7    <property name="src.dir" value="${plug.dir}/src"/> 8    <property name="target.dir" value="${plug.dir}/target"/> 9    <property name="target.lib.dir" value="${plug.dir}/target/lib"/> 10    <property name="jar.file" value="${target.dir}/lib/plugin-classes.jar"/> 11 12    <property name="spark.home" value="${plug.dir}/../spark" /> 13 14    <path id="lib.classpath"> 15        <fileset dir="${plug.lib.dir}" includes="**/*.jar, **/*.zip"/> 16        <fileset dir="${spark.home}/lib" includes="**/*.jar, **/*.zip"/> 17        <fileset dir="${spark.home}/lib/windows" includes="**/*.jar" /> 18    </path> 19 20    <target name="clean" description="Cleans all build related output"> 21        <delete file="${jar.file}"/> 22        <delete dir="${classes.dir}"/> 23        <delete dir="${target.dir}"/> 24    </target> 25 26    <target name="compile" description="Compiles plugin source"> 27        <mkdir dir="${classes.dir}"/> 28        <javac srcdir="${src.dir}" 29               destdir="${classes.dir}" 30               classpathref="lib.classpath" 31               source="1.6" 32               debug="true" 33               target="1.6"/> 34        <copy todir="${classes.dir}"> 35 <fileset dir="${src.dir}" includes="**/*.png"/> 36 <fileset dir="${src.dir}" includes="**/*.gif"/> 37 <fileset dir="${src.dir}" includes="**/*.jpg"/> 38 <fileset dir="${src.dir}" includes="**/*.jpeg"/> 39        </copy> 40    </target> 41 42    <target name="jar" depends="clean,compile" description="Makes a plugin jar"> 43        <mkdir dir="${target.dir}" /> 44        <mkdir dir="${target.lib.dir}"/> 45 46        <copy todir="${target.lib.dir}"> 47            <fileset file="${plug.lib.dir}/lib" includes="**/*"/> 48        </copy> 49 50        <copy todir="${target.dir}"> 51            <fileset file="${plug.dir}/plugin.xml"/> 52        </copy> 53 54        <jar basedir="${classes.dir}" file="${jar.file}" update="false"/> 55 56        <zip zipfile="${plug.dir}/myplugin.jar" basedir="${target.dir}" /> 57    </target> 58 59    <target name="run" depends="jar" description="Makes a plugin jar and starts Spark with that plugin"> 60        <copy todir="${basedir}/../spark/plugins" 61            file="${plug.dir}/myplugin.jar" /> 62 63        <property name="sparklib" value="${basedir}/../spark/lib" /> 64        <java fork="true" classname="org.jivesoftware.Spark" dir="${basedir}/../spark/bin"> 65            <classpath> 66                <fileset dir="${sparklib}"> 67                    <include name="**/*.jar" /> 68                    <include name="**/*.exe" /> 69                    <include name="**/*.dll" /> 70                </fileset> 71                <pathelement location="${basedir}/../spark/resources" /> 72            </classpath> 73            <jvmarg value="-Dappdir=${basedir}/../spark" /> 74        </java> 75    </target> 76 77</project>

代码中的这一段

1    <target name="compile" description="Compiles plugin source"> 2        <mkdir dir="${classes.dir}"/> 3        <javac srcdir="${src.dir}" 4               destdir="${classes.dir}" 5               classpathref="lib.classpath" 6               source="1.4" 7               debug="true" 8               target="1.4"/> 9        <copy todir="${classes.dir}"> 10 <fileset dir="${src.dir}" includes="**/*.png"/> 11 <fileset dir="${src.dir}" includes="**/*.gif"/> 12 <fileset dir="${src.dir}" includes="**/*.jpg"/> 13 <fileset dir="${src.dir}" includes="**/*.jpeg"/> 14        </copy> 15    </target>

基本配置都不用改,只需将1.4改为1.6即可

Window ——> Show View ——> Ant ——> Add Buildfiles

加入Sparkplug/builder/build/build.xml,双击sparkplugs

看到控制台BUILD SUCCESSFUL,就好了~

目录Sparkplug/builder下的myplugin.jar 就是打包成功后的插件了,如果要直接使用的话,只需将其拷贝进spark软件目录下plugins文件夹中就可以了。

4、运行

不要直接运行

右键项目 Run As ——> Run Configurations

创建一个Java Application

Main:

Project:选择当前项目Sparkplug

MainClass:org.jivesoftware.launcher.Startup

建议勾上Stop in Main

Arguments:

VM arguments:-Dplugin="${workspace_loc:Sparkplug}\builder\target\plugin.xml"

ClassPath:

User Entries ——> Advanced Options ——> Add Foldes 选择 Sparkplug/spark/resources

点击Run

成功了~

资料

Sparkplug Kit文档:http://www.igniterealtime.org/builds/sparkplug_kit/docs/latest/sparkplug_dev_guide.html

官方API文档:http://www.igniterealtime.org/builds/sparkplug_kit/docs/latest/api/index.html

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

PS打包实现AI图像论文,英伟达在实时视频PS之路上越走越远

  编辑:Panda  !(https://nimg.ws.126.net/?urlhttp%3A%2F%2Fdingyue.ws.126.net%2F2020%2F1028%2F88b5e6ffj00qiwi6t000id000l000kup.jpg&thumbnail650x2147483647&quality80&typejpg)

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Spark IM 插件开发环境搭建 - HelloWorld