Java的软件包管理系统对我而言似乎总是简单而有效的。JDK本身大量使用它。我们一直在使用它来模仿名称空间和模块的概念。
什么是 Jigsaw项目 (又名Java平台模块系统)试图填补?
从官方网站:
该项目的目标是为Java SE平台设计和实现标准模块系统,并将该系统应用于平台本身和JDK。
Jigsaw和OSGi试图解决相同的问题:如何在保护内部组件的同时允许粗粒度模块进行交互。
在Jigsaw的情况下,较粗粒度的模块包括Java类,程序包及其依赖项。
这是一个示例:Spring和Hibernate。两者都依赖于第三方JAR CGLIB,但是它们使用该JAR的不同,不兼容的版本。如果您依赖标准JDK怎么办?包括Spring想要破解Hibernate的版本,反之亦然。
但是,如果您拥有像Jigsaw这样的更高级别的模型,则可以在不同的模块中轻松管理不同版本的JAR。将它们视为更高级别的软件包。
如果您从GitHub源码构建Spring,您也会看到它。他们已经重做了框架,因此它由几个模块组成:核心模块,持久性模块等。您可以选择应用程序所需的最小模块依赖项集,而忽略其余部分。它曾经是单个Spring JAR,其中包含所有.class文件。
更新:五年后-拼图可能仍然需要解决一些问题。