【发布时间】:2015-04-24 15:05:06
【问题描述】:
我有一个主要处理接口的包,它使用来自第三方 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
在
我的包
当代码被执行时。
我尝试为 com.oth.impl 添加 import-package 但无济于事。当我添加了一个
com.oth.impl.ItfInstance 的虚拟声明
my-bundle.jar 中的某个位置。看起来,Karaf 只有在我们明确使用它们时才会获得导入。有没有更好的办法?有没有办法强制 Karaf 导入包,即使我们没有明确使用它们?
【问题讨论】:
-
不,这不是 OSGi 中导入的工作方式。导入就是导入,没有“强制”选项。由于没有发布清单,因此无法判断您的示例中到底出了什么问题。
-
好吧,我没有示例,但我可以告诉你 pom.xml 具有特定包的导入包,但清单没有,因为该包尚未在代码中明确使用.
-
如果清单不导入包,则不导入包。时期。清单是如何以这种方式结束的?谁知道。这是一个构建问题,因此您必须提供构建系统的详细信息。
标签: osgi apache-karaf