2015-10-13 47 views
2

所以我尝试在我的项目中添加一个新的包。在Eclipse Equinox中一切都很完美,但Maven(Tycho)构建存在问题。我的软件包在OSGi控制台中可见,其状态为启动,但在需要其服务时不会启动。我可以从OSGi控制台手动启动软件包,然后运行。之后我甚至可以重新启动我的应用程序,它仍然有效。OSGi包在maven构建后始终具有'开始'状态

当我进入bundles.info我可以看到这一行:

org.eclipse.orion.server.authentication.github,1.0.0.v20151013-0508,plugins/org.eclipse.orion.server.authentication.github_1.0.0.v20151013-0508.jar,4,false 

如果我改变末尾,则它也可以“假”到“真”。如何配置我的包默认情况下为“真”?我的包(我们称之为A)背后的更大的故事是:它实现了一个在包B中定义的接口(因此A需要B)并在此接口下注册一个服务。该服务在B中使用(B在运行前不知道A)。我听说删除这种循环依赖可能会有帮助,但我不想修改B以避免合并冲突。

+1

“Maven构建存在问题”:在Maven构建期间,您使用什么来启动容器?一个JUnit扩展插件还是一个Maven插件?什么是你的框架的开端?什么是你的捆绑的开始阶段? –

+0

@BalazsZsoldos Maven使用Tycho并创建一个Equinox神器。项目中所有bundle的startlevel是4.但是,我不知道如何检查框架的startlevel。 – w10d

回答

0

也许这不是一个真正的问题。这是Equinox的典型行为。它显示捆绑包开始直到另一个捆绑包实际需要该捆绑包提供的服务。因此,通常情况下,您可以忽略从equinox开始的状态。

或者,您可以在felix上运行捆绑包,并将它们报告为活动。

+0

你的意思是Equinox使用捆绑的Lazy激活策略? –

+0

是的。如果您切换到分点,您也可以在卡拉夫中观察到这一点。当我第一次看到时,我感到非常困惑:-) –

+0

这很奇怪。我认为这是违反规范。来自osgi.org:“一个没有使用START_ACTIVATION_POLICY选项启动的软件包总是被激活。”如果软件包处于“启动”状态,这意味着其激活方法正在运行或尚未被调用(由于惰性激活策略)。因此,某些OSGi服务可能无法使用,从而导致意外行为。 –