【问题标题】:Issues with start levels for gogo console bundlesgogo 控制台捆绑包的启动级别问题
【发布时间】:2014-01-20 23:00:45
【问题描述】:

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

迈克

【问题讨论】:

  • 能否请您发布您实际设置起始级别的配置?
  • 我们使用 Eclipse 产品定义进行战争。启动级别的具体部分是:` `
  • 但是,在一个简单的示例中,一切正常...这一定是我的应用程序设置的特殊之处。
  • 我收到osgi> help gogo: NullPointerException: null osgi>
  • 没有太多的工作;)...一个想法,可能会有所帮助:添加Felix Log(例如来自eu.apache.org/dist//felix/org.apache.felix.log-1.0.1.jar)并检查您在输入时是否在shell中获得任何输出“log debug”...可能会出现详细的gogo异常...顺便问一下您的gogo版本是什么?输入“ss”会得到什么?

标签: osgi equinox eclipse-kepler gogo-shell


【解决方案1】:

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

【讨论】:

  • 不幸的是,为 org.eclipse.osgi 设置 -1 级别并没有帮助。即使重新启动应用程序,问题也会在 Eclipse 内部和外部出现。
【解决方案2】:

我找到了异常的原因:

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

【讨论】:

  • 原因是我们的命令提供者之一很晚才开始活动。 HelpCommand 类中缺少空指针检查。
猜你喜欢
  • 2012-04-11
  • 2013-08-15
  • 1970-01-01
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-27
相关资源
最近更新 更多