java - OSGi 应用程序如何在 Java 9 上运行?

标签 java osgi java-9

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

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

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

最佳答案

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

OSGi 仅使用已发布的 Java SE API,因此将继续在 Java 9 上保持不变。它目前不与 JPMS 模块交互,而您的所有其他 Java 软件都是如此。在某个时候,OSGi 专家组可能会制定 JPMS 模块和 OSGi 包之间的互操作性规范,但那是为了将来。

回答您的具体问题:

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

  2. bundle 更新的工作方式与 18 年来的工作方式相同。为 bundle 提供的类加载器已处理,并创建了一个新的类加载器来加载更新类。

关于java - OSGi 应用程序如何在 Java 9 上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46263491/

相关文章:

Java 端点 - Perl 消费者 Web 服务

Java : File. list() 返回完整文件的名称而不是不完整文件

java - 无法在 Ubuntu 上使用 JDK 9 启动 Eclipse Neon - 退出代码 = 13

java - 如何重新打包JDK9的模块

java - 如何在 Spring 事务管理中调用自定义回滚方法?

java - R-项目 : xlsx package installation failure (due to java issues)

java - 重新启动 karaf 需要更新包

Spring OSGi 状态

jakarta-ee - 传统 Java EE 服务器内的 OSGI 运行时

java-9 - 如何在 jshell 脚本中获取用户输入?