使用bndtools

时间:2017-05-17 17:09:55

标签: java eclipse osgi rcp bndtools

过去几天我一直试图找到问题的解决方案。我试图通过bndrun文件使用bndtools启动器使用3.x兼容层启动Eclipse RCP。

我知道解决方案涉及将bndtools.runtime.eclipse.applauncher放在运行包列表中以便启动E4应用程序,并且有办法将E3.x应用程序迁移到E4。我们希望暂时保持对Rich Client Platform的编程控制,因此迁移到XMI文件以便在此时布置Workbench并不理想。

我创建了一个使用bndtools构建的插件项目。据我所知,我已经包含了运行应用程序所需的所有包,并且已经有几个示例(另外,我发现的大多数OSGI示例都是基于控制台的。)

因为我没有看到RCP加载(我们有一个扩展IApplication接口的RCP插件,我们的项目结构仍然是基于Activator)我最初不知道为什么这不起作用但是将-osgi-console =添加到run属性确实提供了一些额外的信息:

使用 -runfw:org.eclipse.osgi

最后几行如下:

# framework=org.eclipse.osgi.launch.Equinox@59fa1d9b
# registered launcher with arguments for syncing
# will wait for a registered Runnable

此外,我用来测试的插件标记为 STRTD ,使用它的软件包也标记为 STRTD ,而大多数其他软件包都标记为 STRTD 标记为 ACTIV ,我认为这也是问题的一部分。我试图通过包含一行来启动几个捆绑包(其他示例)来强制捆绑包,但是遇到了控制台错误的问题,说明无法加载或找到org.eclipse.core.runtime的主类时尝试将其包含在已激活的捆绑包列表中。 谷歌搜索(甚至Binging)似乎没有产生解决方案,解释了如何设置Eclipse 3.x应用程序以使用bndrun文件运行。我错过了什么?最近我尝试了以下属性:

-runproperties: \
 osgi.os=win32,\
 osgi.clean=true,\
 osgi.console=,\
 eclipse.product=org.eclipse.sdk.ide,\
 osgi.arch=x86_64,\
 osgi.ws=win32,\
 equinox.use.ds=true,\
 eclipse.application=org.eclipse.ui.ide.workbench

我认为如果我使用的实际测试包实际上会激活,我也应该能够找到 plugin.xml 文件中设置的应用程序ID并使用它。即使我在bnd文件中指定了 Bundle-Activator ,尝试激活该插件也会导致无法找到主类错误。那个Activator似乎没有启动,因为我已将它设置为打印到控制台并且没有打印任何内容。我假设由于捆绑包处于 STRTD 状态,因此它没有启动。

对此有任何帮助将不胜感激。

编辑: 作为更新,添加 org.apache.felix.gogo.runtime org.apache.felix.gogo.shell 确实导致我的测试插件的激活器开始运行。奇怪的是,它依赖于插件,从 STRTD 移动到 RSLVD

其他讨论表明我们可能必须使用 EclipseStarter 手动启动Eclipse实例?

1 个答案:

答案 0 :(得分:1)

以下Github repo包含使用bndtools和Eclipse 3.8的示例。它在/cnf/eclipse_common_3.8/bndtools.runtime.eclipse.applaunch-0.1.0.jar中使用了一个改编的bndtools.runtime.eclipse.applauncher,参见3.8 bnd启动配置,这里也包括example.aspectj / example.aspectj。 bnd.app/run/launch_org.eclip se.osgi_3.8.x.bndrun。这是(除了在repo中演示的Aspect之外)用于成功启动Eclipse应用程序的最小捆绑包.b /。