繁体   English   中英

Java Maven OSGi从文件系统动态加载jar并在运行时从它运行类方法

[英]Java Maven OSGi dynamic loading of jar from filesystem and running a class method from it at runtime

我有一个NetBeans OSGi maven项目,需要从另一个OSGi jar运行一个类方法,该jar文件系统在运行时加载。

我试着看一些类似的问题:

  1. 用Java动态加载模块

  2. 从文件系统动态加载OSGi包

  3. 寻找在动态加载Jar文件中使用Apache Felix并在Java中在运行时实例化类的基本示例

  4. java:有一个框架允许动态加载和卸载jar(但不是osgi)?

  5. 如何在OSGI框架中的Runtime动态加载Java类?

但他们似乎没有回答我如何访问我正在加载的包中的方法。

他们似乎对如何加载捆绑包给了我一个很好的指导,但OSGi上的文档也是如此。 我没有找到的是如何从我安装的包中的特定类运行特定方法。 反射似乎不起作用,我已经读过它可能不是一个好主意,无论如何它给了我着名的ClassNotFoundException。

还有整个Manifest导入和导出,如本和其他问题所示OSGi:程序性地将导入添加到一个包

我不能使用bndtools,因为我使用netbeans,我也不确定它是否能完成这项工作。 我也不确定OSGi服务是否与它有任何关系。

在此先感谢任何帮助我不要拔头发的人:)

所以我假设你已经加载并启动了捆绑包。 下一步是获取bundle的类加载器:

ClassLoader loader = bundle.adapt(BundleWiring.class).getClassLoader();

使用此类加载器,您可以按名称加载类,并使用反射来调用该方法。

还请注意,这不是OSGi的良好架构。 如果您已经在编译时知道另一个bundle和类,那么只需使用Import-Package并使用new实例化另一个类。

如果您在运行时不知道其他bundle和类但是可以控制所有bundle源,那么请使用服务方法。 您可以拥有捆绑包共享的公共接口。 另一个bundle可以将其功能作为OSGi服务提供,然后您可以使用共享接口绑定和访问它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM