强制导入Apache Karaf

时间:2015-04-24 15:05:06

标签: osgi apache-karaf

我有捆绑主要处理接口,它使用来自第三方jar的工厂来获取它正在使用的接口的实例。 例如,

  

my-bundle.jar有......

com.oth.itf.Intrface itf = Fctry.getInstance('ABC');

imports-package for com.oth.itf
  

third-party.jar有..

public static com.oth.itf.Intrface getInstance(String abc) {
   if (...) {
       return new com.oth.impl.ItfInstance();
   }
}

exports-package for com.oth.itf and com.oth.impl

一切正常,捆绑也会部署,但问题是我得到了

  

ItfInstance的ClassNotFoundException

on

  

我的束

代码执行时。

我尝试为com.oth.impl添加import-package但无济于事。当我添加

时,事情就开始起作用了
  

com.oth.impl.ItfInstance的虚拟声明

my-bundle.jar中的某些地方。看起来,只有在明确使用它们时,Karaf才能获得进口。有没有更好的办法?有没有办法迫使Karaf导入包裹,即使我们没有明确使用它们?

2 个答案:

答案 0 :(得分:1)

Neil是对的,如果代码中没有使用它,则无法导入。有了Karaf,你有可能提供帮助。使用命令 bundle:dynamic-import ,您可以在运行时向bundle添加动态导入。有了这个,您就可以通过 bundle:headers 找到实际需要的导入,您将找到此捆绑包的导入包。拿起那些并将那些丢失的导入添加到您的清单生成和您的设置。

答案 1 :(得分:0)

如果您没有捆绑:选项,请使用此 dev:命令:

dev:dynamic-import <BundleID>

这允许Karaf导入运行时依赖。