gogo 控制台bundle的起始级别问题



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

话筒

可以运行 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 的起始级别以指示默认值;也许这就是您看到的问题。

我找到了异常的原因:

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

相关内容

  • 没有找到相关文章

最新更新