我有捆绑主要处理接口,它使用来自第三方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导入包裹,即使我们没有明确使用它们?
答案 0 :(得分:1)
Neil是对的,如果代码中没有使用它,则无法导入。有了Karaf,你有可能提供帮助。使用命令 bundle:dynamic-import ,您可以在运行时向bundle添加动态导入。有了这个,您就可以通过 bundle:headers 找到实际需要的导入,您将找到此捆绑包的导入包。拿起那些并将那些丢失的导入添加到您的清单生成和您的设置。
答案 1 :(得分:0)
如果您没有捆绑:选项,请使用此 dev:命令:
dev:dynamic-import <BundleID>
这允许Karaf导入运行时依赖。