使用 bndtools 启动 Eclipse 3.x RCP 应用程序

Launching an Eclipse 3.x RCP Application using bndtools

过去几天我一直在努力寻找解决问题的方法。我正在尝试通过 bnd运行 文件使用 bndtools 启动器使用 3.x 兼容层启动 Eclipse RCP。

我知道解决方案涉及将 bndtools.runtime.eclipse.applauncher 放入 运行 捆绑包列表中以启动 E4 应用程序,并且有一些方法可以迁移 E3.x 申请 E4。我们希望暂时保持对富客户端平台的编程控制,因此目前迁移到 XMI 文件来布置 Workbench 并不理想。

我创建了一个使用 bndtools 构建的插件项目。据我所知,我已将所有必要的包包含到 运行 应用程序中,并遵循了几个示例(顺便说一句,我发现的大多数 OSGI 示例都是基于控制台的)。

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

使用 -运行fw: org.eclipse.osgi

最后几行如下:

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

另外,我用来测试的插件被标记为 STRTD 并且使用它的包也被标记为 STRTD 而大多数其他包被标记为 ACTIV,我认为这也是问题的一部分。我试图通过包含一行来启动多个捆绑包(按照其他示例)来强制捆绑包启动,但是 运行 遇到控制台将出错并指出 无法加载或找到主 [=74] 的问题=] for org.eclipse.core.runtime 当试图将其包含在激活的包列表中时。

谷歌搜索(甚至 Binging)似乎没有产生一个解决方案来解释如何使用 bnd运行 文件将 Eclipse 3.x 应用程序设置为 运行。我错过了什么?最近我尝试了以下属性:

-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,并且改用它。尝试激活该插件也会导致 could not find main class 错误,即使我在中指定了 Bundle-Activator bnd 文件。该 Activator 似乎没有启动,因为我将它设置为打印到控制台并且没有打印任何内容。我假设因为包处于 STRTD 状态,所以它没有启动。

如有任何帮助,我们将不胜感激。

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

其他讨论表明我们可能必须使用 EclipseStarter?

手动启动 Eclipse 实例

以下 Github repo 包含使用 bndtools 和 Eclipse 3.8 的示例。它在 /cnf/eclipse_common_3.8/bndtools.runtime.eclipse.applaunch-0‌ .1.0.jar 中使用经过改编的 bndtools.runtime.eclipse.applauncher。aspectj/example 请参阅 3.8 bnd 启动配置也包括此处示例。aspectj/example .aspectj.bnd.app/run/launch_org.eclip‌ se.osgi_3.8.x.bndrun‌ .这是(除了 repo 中演示的 Aspect 内容之外)使用 bnd 成功启动 Eclipse 应用程序的最小捆绑包集。