是否可以在不调用其激活器的情况下从另一个包中导入包?此包不是任何包初始化所必需的.我知道这是糟糕的设计,但我不能改变它.
例外:
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)
Run Code Online (Sandbox Code Playgroud)
小智 7
是的,有可能,它是OSGi规范所允许的,甚至不是不好的做法.
让我看看我是否理解你.你有捆绑包A,它在其清单中导出一个包,捆绑包B,它导入它.你想在不启动捆绑A的情况下这样做,对吗?
是的,这是可能的.如果bundle A的唯一目的是提供一些java类和包,比如库,它甚至可能没有激活器.根据OSGi规范,捆绑包进入解析状态后,捆绑包的所有导出包都可用于其他捆绑包(即,它已安装,依赖关系已解决,但尚未启动).
使用捆绑A的捆绑包B的状态无关紧要.捆绑包B是否使用导入包中的类也无关紧要.您也不需要做任何特殊的事情,只需以通常的OSGi方式声明依赖项:
捆绑清单:Export-Package:com.acme.aaa
Bundle B manifest:Import-Package:com.acme.aaa
您应该安装bundle A并检查它是否已进入RESOLVED状态,即它是否在系统中满足其依赖性.如果是,您可以保留这样并在捆绑包B中使用它.
上面的人可能会混淆使用OSGi中的SERVICE导入包.提供SERVICE(即"实时"java对象)需要启动bundle并调用其激活器.只是导出包没有.
| 归档时间: |
|
| 查看次数: |
1723 次 |
| 最近记录: |