我试图了解 OSGi 应用程序如何在 Java 9 中工作,假设 OSGi 包不是 JPMS 模块(据我所知,仍然没有解决方案,OSGi 包可以同时作为 JPMS 模块用于生产)。我有几个问题:
- 我对所有 OSGi 应用程序都是一个未命名模块的理解是否正确?
- 如果#1 是,那么
Bundle.update()
是如何工作的?包是否重新加载到未命名的模块?
如果我理解错了,请解释主要原则。
最佳答案
Java SE 9 保证所有遵循标准 Java SE 库的应用程序和库的持续兼容性。
OSGi 仅使用已发布的 Java SE API,因此将继续在 Java 9 上保持不变。它目前不与 JPMS 模块交互,而您的所有其他 Java 软件都是如此。在某个时候,OSGi 专家组可能会制定 JPMS 模块和 OSGi 包之间的互操作性规范,但那是为了将来。
回答您的具体问题:
是的,OSGi 包将映射到 JPMS 术语中的一个或多个“未命名”模块。同样,这正是 Java 9 为所有其他 Java 应用程序保持向后兼容性的方式。
bundle 更新的工作方式与 18 年来的工作方式相同。为 bundle 提供的类加载器已处理,并创建了一个新的类加载器来加载更新类。
关于java - OSGi 应用程序如何在 Java 9 上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46263491/