添加带有自动启动的插件来eclipse RCP应用程序

时间:2011-11-04 16:39:43

标签: eclipse eclipse-plugin eclipse-rcp osgi

我有一个Eclipse RCP应用程序,我正在努力安装我创建的应该单独部署到上述应用程序的插件。

为此,我将应用程序作为./App -console启动,当它停止加载时,我输入:

install file://URLTOjAR/plugin.jar

它返回一个插件ID(比如288),所以我之后输入:

start 288

在此之后,该插件工作正常,但是当我重新启动应用程序时,通过使用ss我只能看到该插件只是“已解决”,但我希望它能够启动。

有没有办法实现自动化?

5 个答案:

答案 0 :(得分:2)

由于您使用的是Eclipse RCP应用程序,因此您最有可能使用SimpleConfigurator来确定当前安装的软件包列表。打开文件App / configuration / org.eclipse.equinox.simpleconfigurator / bundles.info

在该文件中有一个已安装的软件包列表,它们的版本以及它们是否应该自动启动。你会看到这样的一行:

ch.qos.logback.classic,0.9.27.v20110224-1110,plugins/ch.qos.logback.classic_0.9.27.v20110224-1110.jar,4,false

该行的不同部分是:

  1. 包标识符
  2. 捆绑版本
  3. jar文件名,相对于安装位置
  4. 开始等级(通常只是设置为4)
  5. 是否自动启动捆绑包,将其更改为true。
  6. 所以,只需在你的bundles.info中添加这样一行,你应该好好去。

答案 1 :(得分:1)

安装和启动的软件包应该在下次启动时启动。

当框架尝试启动bundle并且它仍然处于RESOLVED状态时,激活器可能抛出异常。检查日志。也许捆绑包不能很好地处理服务,这些资源在启动时尚未可用。

答案 2 :(得分:1)

这是解决这个问题的另一种方法。比使用简单配置器有点麻烦(参见我的其他答案),但它应该更广泛适用。

在文件configuration / config.ini中,应该有一个属性osgi.bundles。此属性采用以逗号分隔的bundle列表,以在osgi实例中使用。该属性如下所示:

osgi.bundles=file:/path/to/bundle,file:/path/to/other/bundle@1\:start

@ 1是捆绑包的起始级别,:start表示捆绑包应该是自动启动的。

答案 3 :(得分:0)

我不确定天气我的问题是对的。但我会尝试一下:

  1. 您为什么要安装与应用程序无关的bundle / plugin。如果您的插件/ bundle与正在运行的应用程序环境无关,那么只需使用eclispe环境启动带有所需其他插件的bundle即可。

  2. 我认为这里发生的事情是捆绑得到延迟加载。如果应用程序插件不使用捆绑包,则有意义。

  3. 如果你真的想让你的应用程序开始使用,你可以做的是,

  4. 找到列出RCP应用中捆绑包的所有开始信息的配置文件。

    *这可以是config.ini文件 *或者如果应用程序使用simpleconfigurator

    ,则为bundles.info文件

    将您的捆绑信息插入其中一个配置文件中。 (如果你想立即开始,则设置一个参数 - 'true')

    HTH, --Pradeep

答案 4 :(得分:0)

创建另一个插件:

  1. 收听捆绑生命周期事件(使用BundleListener)。
  2. 记录添加了捆绑包。
  3. 启动时,查找上次启动时的记录并启动其中列出的包。