我有一个包含三个模块的OSGi项目:Core,A和B。这个想法是在启动Core时启动/运行A和B。

目前,我使用的方法在现实生活中无法使用:

mvn clean install Core.jar
mvn clean install A.jar
mvn clean install B.jar


然后

D:\felix-framework-5.4.0>java -jar bin\felix.jar

install file:/"D:/workingDir/Sample~1/Eclipse/Core-1.0.jar"
install file:/"D:/workingDir/Sample~1/Eclipse/A-1.0.jar"
install file:/"D:/workingDir/Sample~1/Eclipse/B-1.0.jar"


我该如何实现。我可以使用任何框架/ OSGi服务器来实现这一想法吗?哪些研究主题可以帮助您找到答案?

我想将Core放在根目录中,然后将其他插件包放在plugins文件夹中。我如何从核心动态查找并调用plugins文件夹中的模块?

OSGi-Project
    + Core.jar
    + plugins
        + A.jar
        + C.jar
        + D.jar
        + ****.jar




更新

情境

我正在使用的应用程序是OSGi独立桌面应用程序。例如,Core将在左侧保留一个窗格(left-pane)。左窗格将从任何实现名为nodes的接口的模块接受LeftPane。 A实现LeftPane接口。每当启动Core时,它都应扫描文件夹OSGi-Project(在这种情况下),并自动在该文件夹中启动所有捆绑包,包括A,然后继续填充左窗格。

最佳答案

感谢您的澄清。据我所知,您实际上并不需要动态加载或扫描。相反,我建议您让您的插件模块使用LeftPane接口实现服务,并将其发布在OSGi注册表中。

然后,您的核心模块可以侦听所有实现LeftPane的服务,并从中填充UI。

为此,您可以在服务周围利用OSGi API,甚至更好地使用DS或蓝图之类的框架。

关于java - 如何调用多个OSGi模块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34379140/

10-13 05:43