我试图理解OSGi应用程序如何在Java 9中工作,假设OSGi包不是JPMS模块(据我所知,仍然没有OSGi包可以同时用于生产的JPMS模块的解决方案).我有几个问题:
Bundle.update()办?捆绑包是否重新加载到未命名的模块?如果我理解错误,请解释主要原则.
Nei*_*ett 19
Java SE 9保证了所有符合标准Java SE库的应用程序和库的持续兼容性.
OSGi仅使用已发布的Java SE API,因此将继续在Java 9上保持不变.它目前不与JPMS模块交互,这将是所有其他Java软件的情况.在某些时候,OSGi专家组可能会为JPMS模块和OSGi包之间的互操作性制定规范,但这是未来的.
回答您的具体问题:
是的,OSGi包将以JPMS术语映射到一个或多个"未命名"模块.同样,这正是Java 9保留所有其他Java应用程序向后兼容性的方式.
捆绑更新的工作方式与其工作18年相同.为bundle提供的类加载器被处理,并且创建了一个新的类加载器来加载更新类.
OSGi使用类加载器来隔离bundle,并继续在Java 9上执行此操作.由于每个JAR都由一个单独的类加载器加载,每个JAR都以其自己的未命名模块结束.这意味着OSGi实际上忽略了JPMS并继续像Java 9一样工作.
| 归档时间: |
|
| 查看次数: |
2672 次 |
| 最近记录: |