java - OSGI:是否可以在不激活 bundle 的情况下导入包?

标签 java osgi

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

异常:

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)

最佳答案

是的,这是可能的,这是 OSGi 规范允许的,而且这甚至不是不好的做法。

让我看看我是否理解正确。 您有 bundle A,它在其 list 中导出包,还有 bundle B,它导入它。 您想在不启动 bundle A 的情况下完成此操作,对吗?

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

使用 bundle A 的 bundle B 的状态并不重要。 bundle B 是否使用导入包中的类也并不重要。您也不必做任何特殊的事情,只需以通常的 OSGi 方式声明依赖项即可:

bundle A list : 导出包:com.acme.aaa

bundle B list : 导入包:com.acme.aaa

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

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

关于java - OSGI:是否可以在不激活 bundle 的情况下导入包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11537817/

相关文章:

java - 基于 Spring mvc Java 的配置不起作用。控制台显示没有错误,但我的 jsp 页面没有显示

java - 在 JavaFX 中对 MouseEvent 和 KeyEvent 使用相同的 EventHandler?

java - Eclipse/OSGi : How to control the file-name created via an exported plugin (jar)

java - 我的 href 没有重定向到/注销页面

java - 如何将Java对象发送到java中的两个mxml文件之间?

java - 如何使用自定义对象创建 libgdx 数组的副本?

java - Solrj 查询 https 协议(protocol)错误

java - OSGi 声明式服务 (ds) 使用

eclipse - 打印 OSGI 捆绑类路径?

java - 不同版本的扩展同时运行