我刚刚将旧的OSGi项目迁移到当前的equinox版本(Kepler SR1)。当使用gogo控制台时,我在启动级别为1的gogo bundle时遇到了问题(这是我通常对所有相关框架包进行的操作)。尽管所有四个软件包都处于活动状态且正在运行,但gogo控制台无法启动。键入帮助将导致NullPointerException。解决方案是使用默认的启动级别启动所有gogo捆绑包。我错过了什么,或者这仅仅是捆绑生命周期设计不好的情况?捆绑包不应该依赖于起始级别才能工作。
迈克答案 0 :(得分: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 Framework并添加四个包,启动级别为1,自动启动为真。
请注意,org.eclipse.osgi
包是框架包,其起始级别应为-1以指示默认值;也许这就是你所看到的问题。
答案 1 :(得分:0)
我找到了例外的原因:
我们正在使用一些旧式CommandProviders。在打印旧命令的帮助时,equinox.console包中似乎存在错误。类org.eclipse.equinox.console.commands.HelpCommand中的legacyCommandProvider集似乎包含导致异常的空条目(无论出于何种原因)。这有时只会发生。似乎我们需要转换我们的遗留命令......: - (