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