0

我有一个带有以下命令行参数的独立无头 RCP。

Command-line arguments:  -os macosx -ws cocoa -arch x86_64 -clean -consoleLog 

我可以成功生成要作为命令行工具运行的二进制文件,但问题是我必须修改 config.ini 文件

osgi.bundles=org.eclipse.equinox.common@2:start,
org.eclipse.update.configurator@3:start,
org.eclipse.equinox.ds@2:start,
org.eclipse.core.runtime@s

osgi.bundles=org.eclipse.equinox.common@2:start,
org.eclipse.update.configurator@3:start,
org.eclipse.equinox.ds@3:start, <---
org.eclipse.core.runtime@s

如果没有此更改,我在执行二进制文件时会收到这些错误消息。

org.osgi.framework.BundleException: The bundle "org.eclipse.equinox.ds_1.4.0.v20120522-1841 [3]" could not be resolved. Reason: Missing Constraint: Import-Package: org.eclipse.equinox.internal.util.event; version="1.0.0"
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolverError(AbstractBundle.java:1332)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolutionFailureException(AbstractBundle.java:1316)
    at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:323)

“org.eclipse.equinox.ds@3:start”背后的魔力?为什么我更改后效果很好?如何在 Eclipse IDE 中进行设置,以便在创建无头 RCP 时不必一直手动更改 ini 文件。

4

1 回答 1

2

我可以解释更改背后的魔力,但遗憾的是我不熟悉从 Eclipse 导出应用程序。

osgi.bundles是一个属性,它定义了哪些包可用以及它们应该在何时(例如在什么开始级别)开始。平台在 1 级加载并启动这些捆绑包,然后是 2 级,依此类推,直到osgi.startLevel(默认为 6,在上面链接的 juno 文档中描述)。

为了启动org.eclipse.equinox.ds平台,需要加载一个导出包的 1.0.0 版本的org.eclipse.equinox.internal.util.event包。从一些搜索来看,这似乎是org.eclipse.equinox.util捆绑包。

因此,通过从@2 更改为@3,您将 ds 包的启动时间推迟到平台启动的后期,直到加载 util 包后的某个时间点。我怀疑这里有帮助的是org.eclipse.update.configurator捆绑包(因为它是一个捆绑包,其工作是从插件目录加载所有捆绑包。)

于 2013-01-18T23:40:07.430 回答