【发布时间】:2019-10-09 19:27:09
【问题描述】:
我有以下情况。我的应用程序中需要一个类 A 的实例,而这个类 A 来自 Bundle B (osgi),并且位于该 Bundle 中的包 X 中。 到目前为止我做了什么: 我已将包 B 添加到本地 maven 存储库,并将其添加到我的 pom 作为具有“提供”范围的依赖项。 我还添加了来自 Bundle B 的包 X,其中类 A 驻留在我的 pom 中,并在我的 pom.xml 中使用 Dynamic-import。 这里需要注意的一件事 - 包 X 不是从 Bundle B 导出的,但我知道它仍然可以工作,我见过同事这样做,但我还没有那么好。
无论如何我是如何尝试获取以下类的实例:
Bundle bundle;
Class<?> checkClass=bundle.loadClass("full path to class A");
TypeOfClassA newClass=checkClass.newInstance();
我得到了:
java.lang.ClassNotFoundException ClassA not found by myapplication
at
org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1532) 在
org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75)
但是为什么?我已经加载了 jar,我正在使用 bundle 类加载器,如果我将 checkClass 转换为 Object,我可以看到 Class A 的方法和字段,看起来不错,我怎样才能获得 Class A 的实例?
【问题讨论】: