截至昨天早上,我对OSGi是什么甚至一无所知。 OSGi只是我不断看到的一些流行语,所以最终我抽出一些时间来研究它。
实际上,它似乎是相当酷的东西,所以我首先要声明(为记录):我在任何方面都不反对OSGi,并且这不是一个“OSGi批判”的问题。
到最后,似乎OSGi基本上解决了有关Java模块化的JSR 277,该规范认识到JAR文件规范存在缺陷,在某些极端情况下可能会导致命名空间解析和类加载问题。OSGi还有很多其他非常酷的功能,但据我所知,那是它最大的优点之一。
对于我这样一个比较新的(已经几年了)Java EE开发人员来说,令人难以置信的是,我们现在处于2011年,并且正在生活在Java 7时代,而这些类加载问题仍然存在;特别是在企业环境中,其中一个应用服务器可能有数百个JAR文件,其中许多 JAR文件依赖于彼此的不同版本,并且都(或多或少)同时运行。
我的问题:
尽管我对OSGi很感兴趣,并且很想开始学习它,以查看它是否可以用于我的项目,但我现在没有时间去学习如此庞大的东西。
那么当出现这些问题时,非OSGi开发人员该怎么办?目前(Oracle / Sun / JCP)存在哪些解决方案?为什么Jigsaw从J7中被削减了?社区有多确信Jigsaw将在明年的J8中得到实施?即使它不是Java平台的一部分,您是否可以为您的项目获得Jigsaw?
我想我在这里问的是恐慌、好奇和无语的结合。现在我终于明白OSGi是什么了,但我就是不明白像Jigsaw这样的东西怎么会花20多年才能实现,并且如何将其从发布中取消。
而作为一名开发人员,我也很想知道如果没有OSGi,我的解决方案是什么。
另外,注意:我知道这并不是一个“纯编程”类型的问题,但在有些人鼻子歪掉之前,我想再次声明,我故意把这个问题放在SO上。那是因为我对我的SO同行们充满了最大的尊重,我正在寻找一些每天都可见的“IT之神”中的架构级别��案。
但是,对于那些绝对要求带有代码片段的 SO 问题的人:
int x = 9;
感谢任何能够对OSGi/Jigsaw/classloader/namespace/JAR hell问题进行解答的人!