OSGi 应用程序如何在 Java 9 上工作?

2022-09-03 18:36:37

我试图理解OSGi应用程序在Java 9中是如何工作的,假设OSGi捆绑包不是JPMS模块(据我所知,仍然没有解决方案可以同时将OSGi捆绑包同时用于生产的JPMS模块)。我有几个问题:

  1. 我是否正确地理解所有OSGi应用程序都将是一个未命名的模块?
  2. 如果#1是,那么如何工作?捆绑包是否重新加载到未命名的模块?Bundle.update()

如果我理解了一切错误,请解释主要原则。


答案 1

Java SE 9 保证了所有坚持使用标准 Java SE 库的应用程序和库的持续兼容性。

OSGi仅使用已发布的Java SE API,因此将继续在Java 9上原封不动地工作。它目前不与JPMS模块交互,所有其他Java软件都是这种情况。在某些时候,OSGi专家组可能会为JPMS模块和OSGi捆绑包之间的互操作性制定一个规范,但这是针对未来的。

要回答您的具体问题:

  1. 是的,OSGi 捆绑包将映射到 JPMS 术语中的一个或多个“未命名”模块。同样,这正是 Java 9 保持所有其他 Java 应用程序的向后兼容性的方式。

  2. 捆绑更新的工作方式与18年来的工作方式相同。将释放为捆绑包提供的类装入器,并创建一个新的类装入器来装入更新类。


答案 2

OSGi 使用类装入器来隔离捆绑软件,并在 Java 9 上继续这样做。由于每个 JAR 都由单独的类装入器装入,因此每个 JAR 最终都位于其自己的未命名模块中。这意味着OSGi有效地忽略了JPMS,并继续像Java 9之前一样工作。


推荐