过去几天我一直试图找到问题的解决方案。我试图通过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的主类时尝试将其包含在已激活的捆绑包列表中。
-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实例?
答案 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 /。