其实在google或者http://www.eclipse.org/forums/就能够找到这个问题的答案。

搜索关键字:rcp install plugins\bundles programmatically
 
大部分的操作都能在org.osgi.framework.Bundle这个接口里找到,比如start、stop、uninstall等等。
如果对这几个术语不熟悉,请找一本《OSGI最佳原理与实践》,详细阅读OSGI的生命周期相关内容。
 
Bundle接口也维护了所有的生命周期的状态常量比如:
    int    UNINSTALLED                = 0x00000001;
Bundle的获取代码如下所示:
org.eclipse.core.runtime.Platform.getBundle(String symbolicName)

Platform是eclipse平台运行时的核心类,它是静态的不允许继承的,它的内部方法全部是静态方法。即是说,只要你依赖了org.eclipse.core.runtime插件,你可以在任何地方无条件的使用该类的所有公开静态方法。

symbolicName是指插件的插件名,比如org.eclipse.core.runtime_3.7.0.v20110110的插件名即是org.eclipse.core.runtime。

获取Bundle之后,你就可以对该bundle做任何你爱做的事,但是,不包括安装!

我们再看回Bundle插件,注意它的类注释的第一条:

“An installed bundle in the Framework.”

这一句说明,Bundle接口是已经安装的bundle实体,在一个插件jar包还没有被安装的时候,自然不构成Bundle。

我们要如何安装它呢?

找到org.osgi.framework.BundleContext接口。

BundleContext methods allow a bundle to: 

Subscribe to events published by the Framework.
Register service objects with the Framework service registry.
Retrieve ServiceReferences from the Framework service registry.
Get and release service objects for a referenced service.
Install new bundles in the Framework.
Get the list of bundles installed in the Framework.
Get the Bundle object for a bundle.
Create File objects for files in a persistent storage area provided for the bundle by the Framework.

看到红色字体了吗?

为此,BundleContext提供了两个方法:

    Bundle installBundle(String location, InputStream input)
throws BundleException; Bundle installBundle(String location) throws BundleException;

具体的使用请自行参考注释。

如何获取BundleContext呢?

你可以使用一个现存的Bundle来getBundleContext,也可以在你的插件激活器(Activator,如果这个不清楚是什么,请回炉)中直接使用start方法的参数BundleContext。

当然以上两种方法是等效的。

 
 
 

RCP中如何使用代码安装、运行plugins的更多相关文章

  1. Android中插件开发篇之----动态加载Activity(免安装运行程序)

    一.前言 又到周末了,时间过的很快,今天我们来看一下Android中插件开发篇的最后一篇文章的内容:动态加载Activity(免安装运行程序),在上一篇文章中说道了,如何动态加载资源(应用换肤原理解析 ...

  2. 在Window IIS中安装运行node.js应用—你疯了吗

    [原文发表地址]Installing and Running node.js applications within IIS on Windows - Are you mad? [原文发表时间]201 ...

  3. MyEclipse中阿里JAVA代码规范插件(P3C)的安装及使用

    JAVA代码规范插件(P3C)是阿里巴巴2017年10月14日在杭州云栖大会上首发的,使之前的阿里巴巴JAVA开发手册正式以插件形式公开走向业界.插件的相关信息及安装包都可以在GitHub(https ...

  4. IDEA中阿里JAVA代码规范插件(P3C)的安装及使用

    JAVA代码规范插件(P3C)是阿里巴巴2017年10月14日在杭州云栖大会上首发的,使之前的阿里巴巴JAVA开发手册正式以插件形式公开走向业界.插件的相关信息及安装包都可以在GitHub(https ...

  5. 撰写一篇博客要求讲述四则运算2的设计思想,源程序代码、运行结果截图、编程总结分析,并按照PSP0级的要求记录开发过程中的时间记录日志。

    一.撰写一篇博客要求讲述四则运算2的设计思想,源程序代码.运行结果截图.编程总结分析,并按照PSP0级的要求记录开发过程中的时间记录日志. 1.设计思想: ①创建test.jsp建立第一个前端界面,提 ...

  6. pyv8的安装和使用:python中执行js代码

    pyv8 的作用是在python中执行js代码,然后可以使用js里的变量等内容.python取得javascript里面的值.javascript取得python里面的值.python和javascr ...

  7. mysql 连接闪断自动重连的方法(用在后台运行中的PHP代码)

    mysql 连接闪断自动重连的方法(用在后台运行中的PHP代码)当mysql断开连接 $_instance这个还是有值得 所以会报错 MySQL server has gone away 这个地方需要 ...

  8. AppCan IDE中有时格式化代码后,代码就运行不了了。

    AppCan IDE中有时格式化代码后,代码就运行不了了.

  9. C中二叉排序树的非递归和递归插入操作以及中序遍历代码实现【可运行】

    C中二叉排序树的非递归和递归插入操作以及中序遍历代码实现[可运行] #include <stdio.h> #include <stdlib.h> typedef int Key ...

随机推荐

  1. net TreeView 递归

     1.显示效果 2.数据insert脚本 insert into CITY(id,text,pid) values('1','城市',null)insert into CITY(id,text,pid ...

  2. My安卓知识1--SQLite数据库

    前一阵子做了一个小项目,关于android的,想记录一下学到的一些知识,做成一个小系列吧,算是对自己这一个多月来的见证.首先说明,这些知识也都是从网上各处学习来的,我自己做了一些小整理. 1.SQLi ...

  3. oracle 体系结构

    oracle 体系结构 数据库的体系结构是指数据库的组成.工作过程与原理,以及数据在数据库中的组织与管理机制. 1. oracle工作原理: 1).在数据库服务器上启动Oracle实例:2).应用程序 ...

  4. 插入排序 - C语言

    插入排序的思想: 以现有的已排序元素为基础,下一个元素添加到正确的位置,则最终会完成排序. 第一个元素本身是已经排序好的.从第二个开始排. void insertSort(int arr[], int ...

  5. pdoner version 0.1.0 release

    Optional functional pack prepared for fast php framework. Source:https://github.com/farwish/pdoner L ...

  6. 深入研究C语言 第二篇(续)

    1. 关于如下的程序,关于结构体的拷贝,拷贝是拷贝到内存中的什么地方? 我们进入debug进行反汇编,单步等操作跟踪查看.发现: 在main中,我们看到call 0266应该对应的是转跳到func处执 ...

  7. MongoDB GridFS 对图片进行增删改

    using MongoDB.Bson; using MongoDB.Driver; using MongoDB.Driver.Builders; using MongoDB.Driver.GridFS ...

  8. Rails中用CSV导出中文真心有技巧

    require 'csv' class PartRequestsController < ApplicationController def render_csv_header(filename ...

  9. TYVJ博弈论

    一些比较水的博弈论...(为什么都没有用到那什么SG呢....) TYVJ 1140  飘飘乎居士拯救MM 题解: 歌德巴赫猜想 #include <cmath> #include < ...

  10. iOS基础之网络请求相关

    1.AFNetwork二次封装方法一: #import <Foundation/Foundation.h> @interface BeeNetworkManager : NSObject ...