Java 8模块与OSGi有何不同?

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

如果我使用OSGi,我是否可以使用标准的JDK 8版本运行它?

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

给出了OSGi,Java Modularity和Jigsaw这个问题的答案,Jigs的Jigsaw模块系统可能是必需的。 通过JRE,我假​​设OP意味着Java标准库,如IO,CORBA,RMI,它们是用Java编写的,还是作为目标的类库实现? 从阅读Jigsaw项目页面,我认为它是前者。 如果是后者,它如何帮助编写Java代码的其他Java开发人员? 类库是用C / C ++编写的。 有人可以澄清一下吗?

这不是OSGi vs Jigsaw。 我想真正理解使用哪一个。 如果我要编写一个新的应用程序(无论是桌面还是服务器),我希望基于标准实现可能不会过时的技术并放弃使用。 我不是说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一起运行。 但是如果他们继续使用旧的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的目的是与两者互操作(不知何故)。