网上这方面的资料好少哦,官方的文档也很久没有更新了,走了不少弯路 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