0

我刚刚将一个较旧的 OSGi 项目迁移到当前的 equinox 版本 (Kepler SR1)。在使用 gogo 控制台时,我在启动 gogo 捆绑包时遇到了一个问题,启动级别为 1(这就是我通常对所有相关框架捆绑包所做的事情)。尽管所有四个捆绑包都处于活动状态并正在运行,但 gogo 控制台不会启动。键入帮助将导致 NullPointerException。解决方案是使用默认启动级别启动所有 gogo 捆绑包。我是否遗漏了什么,或者这只是捆绑生命周期设计不佳的一个案例?捆绑包不应该依赖于启动级别才能工作。

麦克风

4

2 回答 2

0

我找到了异常的原因:

我们正在使用一些老式的 CommandProviders。打印旧命令的帮助时,Equinox.console 包中似乎存在错误。org.eclipse.equinox.console.commands.HelpCommand 类中的 legacyCommandProviders 集似乎包含导致异常的空条目(无论出于何种原因)。这只有时会发生。似乎我们需要转换我们的旧命令... :-(

于 2014-01-06T08:31:18.763 回答
0

可以运行 Equinox 并以启动级别 1 启动所有包。使用以下启动配置可以按预期工作:

<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -console -clean"/>
<stringAttribute key="target_bundles" value="org.apache.felix.gogo.command@1:true,org.apache.felix.gogo.runtime@1:true,org.apache.felix.gogo.shell@1:true,org.eclipse.equinox.console@1:true,org.eclipse.osgi@-1:true"/>

请记住,Eclipse 在其产品发布时缓存了很多东西,并且由于它没有摆脱发布之间的工作空间,因此经常会出现错误。这有时会导致您在上面看到的错误。您可以删除启动配置,该配置也会清理相关文件夹,然后再将其重新添加。

要验证这是否按预期工作,请创建一个新的运行时配置作为 OSGi 框架并添加四个包,启动级别为 1,自动启动为 true。

请注意,该org.eclipse.osgi包是框架包,并且应该具有 -1 的起始级别以指示默认值;也许这就是你看到的问题。

于 2014-01-04T12:27:33.423 回答