Java 8模块与OSGi有何不同



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

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

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

对于

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

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

正如评论中所写的,Java 8不会随Jigsaw一起提供。也许是Java 9。

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

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

无论如何,OSGi应该在Jigsaw上运行良好。但是很多库在Java 9上会中断,如果它们继续使用旧的sun.*包或其他内部JRE代码。

2015 年 3 月更新

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

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

  • 类加载器 - Jigsaw 不会使用类加载器;由运行时(如应用程序服务器或 OSGi(来处理模块和类加载器
  • 依赖关系 - Jigsaw将允许按名称指定对模块的依赖关系,但不是在包级别指定对模块的依赖关系
  • 动态服务 - 由 OSGi 提供的运行时服务模型不会由 Jigsaw 提供

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

最新更新