2

是否可以从另一个包中导入包而不调用其激活器?这个包不需要任何捆绑初始化。我知道这是一个糟糕的设计,但我无法改变它。

例外:

org.osgi.framework.BundleException: The activator my-package.Activator for bundle my-bundle is invalid
at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator(AbstractBundle.java:157)  
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:750)  
at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:352)  
at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:370)  
at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1068)  
at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:557)  
at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:464)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:248)  
at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:445)  
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:220)  
at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:330)
4

3 回答 3

7

是的,这是可能的,这是 OSGi 规范允许的,这甚至不是坏习惯。

让我看看我是否理解你的正确。您有包 A,它在其清单中导出一个包,以及包 B,它导入它。您想在不启动捆绑包 A 的情况下做到这一点,对吗?

是的,这是可能的。如果 bundle A 的唯一目的是提供一些 java 类和包,比如库,它甚至可能没有激活器。根据 OSGi 规范,捆绑包的所有导出包在捆绑包进入已解决状态(即已安装,依赖关系已解决,但尚未启动)后立即可供其他捆绑包使用。

使用捆绑包 A 的捆绑包 B 的状态无关紧要。包 B 是否使用导入包中的类也无关紧要。您也不必做任何特别的事情,只需以通常的 OSGi 方式声明依赖项:

Bundle A 清单:Export-Package: com.acme.aaa

Bundle B 清单:Import-Package: com.acme.aaa

您应该安装 bundle A 并检查它是否已进入 RESOLVED 状态,即系统是否满足其依赖关系。如果是,您可以这样保留它并在捆绑包 B 中使用它。

上面的人可能会将导入包与在 OSGi 中使用 SERVICE 混淆。提供 SERVICE(即“实时”java 对象)需要启动包并调用其激活器。只是导出包不会。

于 2012-07-18T09:39:49.327 回答
0

根据OSGi 规范,这是不可能的。您唯一的选择是急切激活和延迟激活,这两种方法都发生在您观察捆绑包中的任何类之前。

顺便说一句,如果您真的只是导入一个包而没有引用任何类,那么延迟激活的包将不会被激活。不过,我怀疑这是你的情况。

于 2012-07-18T09:08:17.000 回答
0

如果捆绑包处于已解决状态,您可以导入它的包,它尚未启动(还没有?)。

所以:只需安装捆绑包,不要启动它。我想这取决于上下文是否是一个好主意。

于 2012-07-18T09:11:37.717 回答