使用java 11+, Eclipse, OSGi:
所以,我有一个"master"模块。基本上可以认为是app的主要模块。从这个模块中,我可以动态地访问OSGi实现。(现在,Apache felix,但这真的不重要,我不认为。)然后,我可以通过主应用安装/使用OSGi包,并在包之间调用类,如果适当的导入/导出设置。没问题。
我的app模块嵌入java.desktop和java.xml模块。因此,我安装的所有bundle都可以访问这些模块中的类(Swing, org.w3c。Dom等)——而且它能工作。
现在,如果我想从java模块访问代码,比如说java。Sql,从一个新的bundle,但我没有那个模块(java.sql)嵌入在我的主模块?这个新bundle如何访问java。sql代码?
本质上,每次我试图调用我没有首先嵌入到主模块中的模块代码时,我都会得到一个未发现类的错误。通过运行配置,我可以设置我的主模块来嵌入这些模块:java.desktop, java.xml, java。Sql,或任何其他(通过"requires"模块信息文件中的语句。我如何在运行时从以后动态安装的osgi包访问新的(非当前嵌入的)模块?
是否有某种bundle-config来将特定的java模块嵌入到一个bundle中,类似于module-info中的require语句?
我必须通过某种服务访问动态调用这些新模块吗?
谢谢。
查看OSGi Connect规范和实现OSGi Connect的Apache Felix Atomos项目。
OSGi Connect为JPMS模块和OSGi包的混合环境定义了交互机制。