我有两个(Liferay 7)osgi捆绑包,A和B这样
我需要实现:
仅当部署了捆绑包A时,捆绑包B中的类b应该在捆绑包A中创建类a的对象。
我不想在B&#39的build.gradle中将bundle A作为编译依赖项,我想直接在bundle B的b类中加载如果上面的"只有...&... #34;是的。
我尝试过(在B组中):
try {
@SuppressWarnings("unchecked")
Class<SomeInterface> clazz =
(Class<SomeInterface>) Class.forName(
BUNDLE_A_CLASS_NAME);
if (null != clazz &&
Bundle.ACTIVE == FrameworkUtil.getBundle(clazz).getState()) {
SomeInterface x = clazz.newInstance();
}
}
catch (Exception e) {
// handle this
}
...
其中SomeInterface x是我在类路径上的接口,但clazz.newInstance()是bundle A中的一个实现。
-
我还尝试添加到B&#39的bnd.bnd文件
1- DynamicImport-Package: *
到我希望动态加载类的bundle
2- ImportPackage: *
的方式与1
非常感谢任何反馈或建议。感谢。
答案 0 :(得分:2)
尼尔是对的。你应该使用服务。在您的捆绑包B中(或在单独的捆绑包C中)创建一个作为服务合同的接口S.在您的捆绑包中用它来连接和注册OSGi服务的工具。然后在你的B类包中添加对S的可选贪婪服务引用。这样