![](/img/trans.png)
[英]Locate a folder in a maven project java when running from jar throgh class.getClassLoader().getResource(“”); method
[英]Java Maven OSGi dynamic loading of jar from filesystem and running a class method from it at runtime
我有一个NetBeans OSGi maven项目,需要从另一个OSGi jar运行一个类方法,该jar文件系统在运行时加载。
我试着看一些类似的问题:
但他们似乎没有回答我如何访问我正在加载的包中的方法。
他们似乎对如何加载捆绑包给了我一个很好的指导,但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.