带有Project Jigsaw的Java 8为SDK带来了一个模块系统。我认为它是一件好事,因为它是包的一部分(内置)。 OSGi还提供了一个模块系统,但需要一个容器。但除此之外,它们之间的主要区别是什么。
如果我使用OSGi,我是否可以使用标准的JDK 8版本运行它?
当默认SDK包含此类功能时,OSGi是否相关?我的理解是OSGi和Jigsaw都可以用来编写普通的模块化Java应用程序而不仅仅是基于ser的应用程序(servlet等),对吗?
问题OSGi, Java Modularity and Jigsaw给出的答案表明,JRE可能需要Jigsaw模块系统。通过JRE,我假设OP意味着Java标准库,如IO,CORBA,RMI,它们是用Java编写的,还是作为目标的类库实现?从阅读Jigsaw项目页面,我认为它是前者。如果是后者,它甚至会如何帮助编写Java代码的其他Java开发人员?类库是用C / C ++编写的。有人可以澄清一下吗?
这不是OSGi vs Jigsaw。我想真正了解使用哪一个。如果我要编写一个新的应用程序(无论是桌面还是服务器),我希望基于可能不会被标准实现淘汰的技术并放弃使用。我不是说OSGi已经过时了,我喜欢OSGi。我正在看大局,OSGi本身未来的发展方向。
答案 0 :(得分:23)
如评论中所述,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代码,很多库都将在Java 9上中断。
2015年3月更新
在EclipseCon 2015上,Mark Reinhold发表了关于Java 9更新的主题演讲.Java 9将包含一个Java模块系统。它适用于JRE / JDK,也可供任何想要使用它的Java应用程序使用。但是,范围发生了一些变化。
主要差异(截至2015年3月)是:
Jigsaw不打算替换和/或与任何其他运行时或构建时模块系统(例如OSGi或Maven)竞争。事实上,Jigsaw的目的是与两者互操作(不知何故)。