OSGi 应用程序如何在 Java 9 上运行?
How does OSGi application work on Java 9?
我试图了解 OSGi 应用程序在 Java9 中的工作原理,假设 OSGi 包不是 JPMS 模块(据我所知,仍然没有解决方案,OSGi 包可能同时是 JPMS生产模块)。我有几个问题:
- 我的理解是否正确,所有 OSGi 应用程序都是一个未命名的模块?
- 如果#1 是,那么
Bundle.update()
是如何工作的?包是否重新加载到未命名的模块?
如果理解有误,请说明主要原理。
OSGi 使用 class 加载器来隔离包,并在 Java 9 上继续这样做。由于每个 JAR 都由单独的 class 加载器加载,因此每个 JAR 都以自己的方式结束未命名模块。这意味着 OSGi 有效地忽略了 JPMS 并像以前一样继续工作 Java 9.
Java SE 9 保证所有遵循标准 Java SE 库的应用程序和库的持续兼容性。
OSGi 仅使用已发布的 Java SE API,因此将继续在 Java 9 上保持不变。它目前不与 JPMS 模块交互,这将是您所有的情况其他 Java 软件。在某个时候,OSGi 专家组可能会为 JPMS 模块和 OSGi 包之间的互操作性制定规范,但那是为了将来。
回答您的具体问题:
是的,OSGi 包将映射到 JPMS 术语中的一个或多个 "unnamed" 模块。同样,这正是 Java 9 为所有其他 Java 应用程序保留向后兼容性的方式。
捆绑包更新的工作方式与 18 年来的工作方式相同。为捆绑包提供的类加载器已处理,并创建了一个新的类加载器来加载更新 类.
我试图了解 OSGi 应用程序在 Java9 中的工作原理,假设 OSGi 包不是 JPMS 模块(据我所知,仍然没有解决方案,OSGi 包可能同时是 JPMS生产模块)。我有几个问题:
- 我的理解是否正确,所有 OSGi 应用程序都是一个未命名的模块?
- 如果#1 是,那么
Bundle.update()
是如何工作的?包是否重新加载到未命名的模块?
如果理解有误,请说明主要原理。
OSGi 使用 class 加载器来隔离包,并在 Java 9 上继续这样做。由于每个 JAR 都由单独的 class 加载器加载,因此每个 JAR 都以自己的方式结束未命名模块。这意味着 OSGi 有效地忽略了 JPMS 并像以前一样继续工作 Java 9.
Java SE 9 保证所有遵循标准 Java SE 库的应用程序和库的持续兼容性。
OSGi 仅使用已发布的 Java SE API,因此将继续在 Java 9 上保持不变。它目前不与 JPMS 模块交互,这将是您所有的情况其他 Java 软件。在某个时候,OSGi 专家组可能会为 JPMS 模块和 OSGi 包之间的互操作性制定规范,但那是为了将来。
回答您的具体问题:
是的,OSGi 包将映射到 JPMS 术语中的一个或多个 "unnamed" 模块。同样,这正是 Java 9 为所有其他 Java 应用程序保留向后兼容性的方式。
捆绑包更新的工作方式与 18 年来的工作方式相同。为捆绑包提供的类加载器已处理,并创建了一个新的类加载器来加载更新 类.