Jitsi(SIP communicator)创建自定义UI插件
2011-12-09 14:42
260 查看
概述
在进行二次开发,特别是开源项目的二次开发中,有那么几点我觉得是非常重要的,第一是在修改之前要先搞清楚这个开源项目如何进行部署、打包和测试,这些东西一般来说比较烦,容易产生问题,而国外开源软件的文档可能不是那么全面,环境和我们也可能不同(一般是linux环境居多);第二是在修改之前,先研究一下别人的源码,看看别人是不是给你提供了一些二次开发的接口,一般都会有一些plugins之类的,可以直接拿过来用;第三也是最重要的,如果不是特别需要,尽量不要直接修改别人的代码,也不要破坏别人的类结构(比如在别人的包下面加类),这样做,以后维护起来比较方便,而且我们也可以继续更新使用官方的新版本。
在Jitsi这个项目的基础上进行二次开发,之前已经研究过它的编译打包,下面我们要研究一下它的架构,首先这个项目是一个基于OSGI的项目,OSGI的结构,简单来说就是一个OSGI加多个Bundle(也可翻译为模块或者插件),因此我们在这个架构上进行二次开发方向比较明确,就是进行OSGI的模块开发;然后我们研究一下源码发现它对于UI开发提供了一些容器和接口,可以方便我们进行GUI开发,并且给出了一个exampleplugin的Bundle,具体大家可以自行查看源码。
创建包和类,配置OSGI环境
在JItsi项目的源码目录下(src)添加包:test.plugin.employeebook包,在这个包下新建一个类:EmployeebookPluginActivator,如下
应用JItsi的UI加载机制
配置OSGI框架自启动我们的插件
这一步我们按照OSGI的标准来就可以了,我们运行上面的Ant Target,发现项目sc-bundles目录下多出一个plugin-employeebook.jar文件,然后我们修改lib目录下的felix.client.run.properties文件,加入\ reference:file:sc-bundles/plugin-employeebook.jar,重启Jitsi项目,我们会发现插件被自动加载进来了。
在进行二次开发,特别是开源项目的二次开发中,有那么几点我觉得是非常重要的,第一是在修改之前要先搞清楚这个开源项目如何进行部署、打包和测试,这些东西一般来说比较烦,容易产生问题,而国外开源软件的文档可能不是那么全面,环境和我们也可能不同(一般是linux环境居多);第二是在修改之前,先研究一下别人的源码,看看别人是不是给你提供了一些二次开发的接口,一般都会有一些plugins之类的,可以直接拿过来用;第三也是最重要的,如果不是特别需要,尽量不要直接修改别人的代码,也不要破坏别人的类结构(比如在别人的包下面加类),这样做,以后维护起来比较方便,而且我们也可以继续更新使用官方的新版本。
在Jitsi这个项目的基础上进行二次开发,之前已经研究过它的编译打包,下面我们要研究一下它的架构,首先这个项目是一个基于OSGI的项目,OSGI的结构,简单来说就是一个OSGI加多个Bundle(也可翻译为模块或者插件),因此我们在这个架构上进行二次开发方向比较明确,就是进行OSGI的模块开发;然后我们研究一下源码发现它对于UI开发提供了一些容器和接口,可以方便我们进行GUI开发,并且给出了一个exampleplugin的Bundle,具体大家可以自行查看源码。
创建包和类,配置OSGI环境
在JItsi项目的源码目录下(src)添加包:test.plugin.employeebook包,在这个包下新建一个类:EmployeebookPluginActivator,如下
public class EmployeebookPluginActivator implements BundleActivator{ @Override public void start(BundleContext arg0) throws Exception { // TODO Auto-generated method stub } @Override public void stop(BundleContext arg0) throws Exception { // TODO Auto-generated method stub } }在同样的包下新建一个名为employeebookplugin.manifest.mf的文件,内容如下:
Bundle-Activator: test.plugin.employeebook.EmployeebookPluginActivator Bundle-Name: EmployeeBook plugin Bundle-Description: A plugin used to show employee book Bundle-Vendor: Bundle-Version: 0.0.1 Import-Package: org.osgi.framework修改项目根目录下的build.xml文件,添加一个ant target如下:
<target name="bundle-plugin-employeebook" depends="compile"> <jar compress="false" destfile="${bundles.dest}/plugin-employeebook.jar" manifest="${src}/test/plugin/employeebook/employeebookplugin.manifest.mf"> <zipfileset dir="${dest}/test/plugin/employeebook" prefix="test/plugin/employeebook" /> </jar> </target>然后运行这个target,完成后在项目根目录下的sc-bundles目录下出现plugin-employeebook.jar,然后修改lib目录下的felix.client.run.properties文件,设置felix框架自动加载这个bundle,然后运行整个项目,在选项》插件下找到这个插件,说明插件部署成功了。
应用JItsi的UI加载机制
public class EmployeebookPluginActivator implements BundleActivator{ @Override public void start(BundleContext arg0) throws Exception { // TODO Auto-generated method stub //在主窗口中加如一个TAB窗口,这个EmployeebookPanel 是一个JPanel EmployeebookPanel employeePanel = new EmployeebookPanel(Container.CONTAINER_MAIN_TABBED_PANE); Hashtable<String, String> containerFilter = new Hashtable<String, String>(); containerFilter.put( Container.CONTAINER_ID, Container.CONTAINER_MAIN_TABBED_PANE.getID()); arg0.registerService(PluginComponent.class.getName(),employeePanel,containerFilter); //以上应用了Jitsi的插件UI管理机制,其中Container下有许多常量,代表着不同的容器, //通过这些容器我们可以方便地把需要的组件添加到菜单栏、状态栏都位置 } @Override public void stop(BundleContext arg0) throws Exception { // TODO Auto-generated method stub } }
配置OSGI框架自启动我们的插件
这一步我们按照OSGI的标准来就可以了,我们运行上面的Ant Target,发现项目sc-bundles目录下多出一个plugin-employeebook.jar文件,然后我们修改lib目录下的felix.client.run.properties文件,加入\ reference:file:sc-bundles/plugin-employeebook.jar,重启Jitsi项目,我们会发现插件被自动加载进来了。
相关文章推荐
- Android入门(四)UI-创建自定义控件
- plugman创建自定义cordova插件
- jQuery创建自己的插件(自定义插件)的方法
- Android自学初步——自定义View(1)之创建初步——Android,UI 绘制
- jquery-ui插件弹出框dialog自定义网页弹出位置
- Kendo UI开发教程:使用Kendo UI Web创建自定义组件(基础篇)
- ionic3使用cordova创建自定义插件
- 使用AndroidStudio创建自定义gradle插件并被引用实战例子
- 创建一个自定义 jQuery 插件
- Jitsi(SIP communicator)的环境部署和打包发布
- jQuery创建自己的插件(自定义插件)的方法
- 利用Jquery.blockui.js创建可拖动、自定义内容的弹出层
- jquery--创建一个自定义 jQuery 插件
- 如何创建一个自定义jQuery插件
- Maven自定义绑定插件目标:创建项目的源码jar
- 一种不通过UI给C4C自定义BO创建测试数据的方式
- Qt 5.2 自定义设计师UI插件 遇到问题记录
- Qt5中创建及使用自定义插件遇到的一些问题
- 一种不通过UI给C4C自定义BO创建测试数据的方式
- Django CMS 创建自定义插件