Osgi gogo控制台捆绑包的启动级别问题

Osgi gogo控制台捆绑包的启动级别问题,osgi,equinox,eclipse-kepler,gogo-shell,Osgi,Equinox,Eclipse Kepler,Gogo Shell,我刚刚将一个较旧的OSGi项目迁移到当前的equinox版本(开普勒SR1)。在使用gogo控制台时,我在使用start level 1启动gogo捆绑包时遇到了一个问题(这是我通常对所有相关框架捆绑包所做的)。尽管四个捆绑包都处于活动状态并正在运行,但gogo控制台不会启动。键入help将导致NullPointerException。解决方案是以默认启动级别启动所有gogo捆绑包。我是否遗漏了什么,或者这只是捆绑包生命周期设计糟糕的一个例子?捆绑包不应依赖于启动级别才能工作 Mike可以运行E

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


Mike

可以运行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框架,并添加四个bundle,start level 1和autostart true


注意,
org.eclipse.osgi
bundle是框架bundle,应该有一个-1的起始级别来表示默认值;也许这就是你看到的问题

我找到了异常的原因:


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

您可以发布一段您实际设置启动级别的配置吗?我们使用eclipse产品定义。启动级别的具体部分是:``但是在一个简单的示例中,一切正常……这一定是我的应用程序设置的特殊之处。我正在<代码>osgi>帮助gogo:NullPointerException:null osgi>不太适合使用;)。。。一个可能有用的想法是:添加Felix日志(例如from),并在键入“Log debug”时检查shell中是否有任何输出。。。可能会出现详细的gogo异常。。。顺便问一下,你的gogo版本是什么?键入“ss”会得到什么?不幸的是,为org.eclipse.osgi设置-1级别没有帮助。即使应用程序重新启动,eclipse内部和外部也会出现问题,原因是我们的一个命令提供程序很晚才启动。HelpCommand类中缺少空指针检查。