24

带有 Project Jigsaw 的 Java 8 为 SDK 带来了一个模块系统。我认为这是一件好事,因为它是软件包的一部分(内置)。OSGi 也提供了一个模块系统,但需要一个容器。但除此之外,它们之间的主要区别是什么。

如果我使用 OSGi,我能否使用标准 JDK 8 版本运行它?

当默认 SDK 包含此类功能时,OSGi 是否相关?我的理解是 OSGi 和 Jigsaw 都可以用来编写普通的模块化 Java 应用程序,而不仅仅是基于 ser 的应用程序(servlet 等),对吧?

对OSGi、Java Modularity 和 Jigsaw问题的回答说,JRE 可能需要 Jigsaw 模块系统。通过 JRE,我假​​设 OP 是指 Java 标准库,如 IO、CORBA、RMI,它们是用 Java 编写的,还是作为目标基础的类库实现?通过阅读 Jigsaw 项目页面,我认为是前者。如果是后者,它如何帮助其他编写 Java 代码的 Java 开发人员?类库是用 C/C++ 编写的。有人可以澄清一下吗?

这不是 OSGi vs Jigsaw。我想真正了解使用哪一个。如果我要编写一个新的应用程序(无论是桌面还是服务器),我希望基于可能不会被标准实现过时的技术并放弃软件。我并不是说 OSGi 已经过时,我喜欢 OSGi。我着眼于大局,OSGi 本身的未来方向是什么。

4

1 回答 1

26

正如评论中已经写的那样,Jigsaw 不会附带 Java 8。也许Java 9。

此外,在 JavaOne 2013 上,我参加了 Mark Reinhold 的一次演讲,听起来 Jigsaw 的发展方向通常不对 Java 开发人员开放,即 JRE 将使用 Jigsaw 来模块化 JRE(阅读:rt.jar)本身但它不应该被 Java 开发人员使用。给出的原因之一是 Jigsaw 不应与 Maven、OSGi 等现有解决方案竞争。另一个原因是关闭对 sun.* 内部包的访问。

但我也从那天晚些时候参加 BOF 的人那里听说,社区有一些要求为 Java 开发人员打开 Jigsaw,但我没有听到任何更新。

在任何情况下,OSGi 都应该在 Jigsaw 上运行良好。但是如果很多库继续使用旧的 sun.* 包或其他内部 JRE 代码,它们将在 Java 9 上崩溃。

2015 年 3 月更新

在 EclipseCon 2015 上,Mark Reinhold 发表了关于 Java 9 更新的主题演讲。Java 9 将包含 Java 的模块系统。它适用于 JRE/JDK,也可用于任何想要使用它的 Java 应用程序。但是,范围发生了一些变化。

主要区别(截至 2015 年 3 月)是:

  • 类加载器 - Jigsaw 不会使用类加载器;使用模块和类加载器取决于运行时(例如应用程序服务器或 OSGi)
  • 依赖关系- Jigsaw 将允许通过名称指定对模块的依赖关系,但不能在包级别指定依赖关系
  • 动态服务——Jigsaw 不会提供 OSGi 提供的运行时服务模型

Jigsaw 无意替代和/或与任何其他运行时或构建时模块系统(例如 OSGi 或 Maven)竞争。事实上,Jigsaw 的目的是(以某种方式)与两者互操作。

于 2013-12-20T16:56:03.050 回答