Java的模块化——1、Jigsaw是什么

概述

创建这个项目的主要目的如下:

1、使程序员更容易的创建和维护库以及大型的应用程序

2、总体上提高Java SE平台的安全性和可能维护性,特别是JDK

3、能够改善应用程序的性能

4、能够使Java SE Platform和JDK缩减使用规模,以便在小型计算设备和密集云计算中使用。

为了达成这些目标,在Java SE 9的平台上设计和实现了一个标准的模块系统,并将该系统应用于平台自身及参考实现(Java 9参考实现),也就是说从java9开始,JDK自身也是基于jigsaw进行模块化的设计有开发的。它是模块化JDK和其他大型代码库的强有力的工具,而且依然对所有程序员保持友好。

现在我们已经实现了这个项目想要实理的目标,接下来,根据实际使用中的反馈,进行额外工作以改进模块系统和模块化平台。

项目Jigsaw是一个综合的项目,其新功能主要针对两个方面:

  • 在Java语言中引入模块系统
  • 及其在JDK源码和Java运行时中的实现

通过本文,我们将向你介绍Jigsaw项目及它的特性,最后将其打包为一个简单的模块化的应用程序。

模块化

简而言之,模块化是一个设计原则,用来帮助我们实现:

  • 组件间的松耦合
  • 明确组件间的约定和依赖
  • 使用强封装来隐藏实现

模块化的单位

现在问题来了,什么是模块化的单位呢?在Java的世界里,特别是OSGi,JAR被认为是模块化的单位。

JAR确实有助于将相关的组件彼此间组合在一起,但是它们存在一些缺点:

  • JAR间显式的契约和依赖关系
  • 在JAR内部元素的封装很弱

JAR的地狱

JAR存在其他的问题——JAR 地狱。在classpath中存在着多个版本的JAR,导致类加载器加载从JAR中找到的第一个类,结果会非常出乎意料。

另外的问题是JVM使用这样的classpath会成功的编译应用程序,但是应用程序会因为ClassNotFoundException而在运行时失败,原因是运行时的classpath上缺少jar。

Jigsaw的卖点

模块化的最大的卖点就是强封装性。

一个JAR文件中的任何公有(public)类在JVM中的任何地方都是可见的。这严重的限制了JDK实现的保持内部API的私有性的能力。在Java运行时中,有些类不需要也不想对外开放,而有些类又是必须对外公开的。

使用模块化使这一切带来了转变。每一个模块都能够显示的定义它的API是哪种可见类型。是对包(JAR文件包)内可见、还是对JVM可见。

它让非公有的类(default)与未进行包导出的类一样,都不能从模块的外部进行访问。

结束

由于来自于maven的中央仓库的很多类库还不支持模块化,找不到相关的模块描述文件,所以暂时不要使用它来构建自己的项目,否则会因为无法找到引入其它第三方类库的模块而无法编译。

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注