我有一个包含三个模块的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/