“org.eclipse.equinox.ds@3:start”背后的魔力?

时间:2013-01-18 22:19:22

标签: java eclipse eclipse-plugin rcp

我有一个带有以下命令行参数的独立无头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文件。

1 个答案:

答案 0 :(得分:2)

我可以解释这一变化背后的魔力,但遗憾的是我不熟悉从Eclipse中导出应用程序。

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

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

因此,通过从@ 2更改为@ 3,您可以将ds包的启动推迟到平台启动之后到加载util包之后的某个点。我怀疑这里有什么帮助org.eclipse.update.configurator捆绑(因为它是一个捆绑,其工作是load all the bundles from the plugins directory。)