JavaMaven OSGi从文件系统动态加载jar,并在运行时从中运行类方法

JavaMaven OSGi从文件系统动态加载jar,并在运行时从中运行类方法,java,maven,netbeans,jar,osgi,Java,Maven,Netbeans,Jar,Osgi,我有一个NetBeans OSGi maven项目,它需要从另一个OSGi jar运行一个类方法,这个OSGi jar在运行时从文件系统加载 我试着看一些类似的问题: 但它们中似乎没有一个能够回答我如何访问正在加载的包中的方法 他们似乎给了我一个很好的关于如何加载捆绑包的指导,但是OSGi上的文档也是如此。我没有找到的是如何从我安装的包中的特定类运行特定方法。反思似乎不起作用,我读到它可能不是一个好主意,无论如何,它给了我一个著名的类NotFoundException 还有整个舱单进口

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

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

  • 但它们中似乎没有一个能够回答我如何访问正在加载的包中的方法

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

    还有整个舱单进口和出口,如本问题和其他问题所示

    我不能使用bndtools,因为我使用的是netbeans,而且我也不确定它是否能完成任务。我也不确定OSGi服务是否与此有关


    提前感谢所有帮助我避免脱发的人:)

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

    ClassLoader loader = bundle.adapt(BundleWiring.class).getClassLoader();
    
    使用这个类加载器,您可以按名称加载该类,并使用反射对其调用方法

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


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

    我已经使用NetBeans OSGi一段时间了,但现在手头没有IDE。我记得您必须在NetBeans中添加bundle作为依赖项,然后您可以随意调用这些方法。但是你应该首先导出所需的软件包。当问题是“我如何射中自己的脚”时,实际给出如何射中自己的脚的说明可能并不总是一个好主意。