Java 9 模块

Java 9模块是Java结构中最大的变化之一。在这里,我将对“Java 9模块系统”进行简要的高级介绍。

Java 9模块

我们将深入了解Java 9模块系统的以下主题。

  1. 介绍
  2. Java SE 9:Jigsaw项目
  3. 当前Java系统存在的问题?
  4. Java SE 9模块系统的优势
  5. 比较JDK 8和JDK 9
  6. 什么是Java 9模块?
  7. Java 9模块系统的基础
  8. 比较Java 8和Java 9应用程序

介绍

Oracle公司将Java 9发布日期从2017年3月推迟到2017年9月。正如我们所知,Java SE 8带来了三个重要的新特性(以及一些增强和新功能)。

  1. Lambda表达式
  2. 流API
  3. 日期API

同样,Java SE 9将提供三个重要的功能(以及一些增强和新功能):

  1. Java模块系统(Jigsaw项目)
  2. Java REPL
  3. 铣削项目硬币

在这篇文章中,我们将讨论Oracle Jigsaw项目的基础知识。

Java SE 9:Jigsaw项目

Jigsaw项目将引入Java SE 9的全新概念:Java模块系统。这是Oracle Corp在Java SE 9发布中非常重要和有声望的项目。最初,他们将这个项目作为Java SE 7发布的一部分。然而,由于有巨大的变化,它被推迟到了Java SE 8,然后又被推迟了。现在它即将在2017年9月与Java SE 9一起发布。Jigsaw项目的主要目标:

  • 模块化的JDK
    正如我们所知,当前的JDK系统过于庞大。因此,他们决定将JDK本身划分为小模块,以获得多种好处(我们将在接下来的部分中详细讨论这些好处)。- 模块化源代码
    当前的源代码jar文件太大了,特别是rt.jar太大了。因此,他们打算将Java源代码划分为较小的模块。- 模块化运行时图像
    该功能的主要目标是“重组JDK和JRE运行时图像以适应模块”。- 封装大多数内部API
    该功能的主要目标是“默认情况下使JDK的大多数内部API无法访问,但保留一些关键的、广泛使用的内部API的访问权限”。- Java平台模块系统
    该功能的主要目标是“允许用户创建自己的模块来开发他们的应用程序”。- jlink:Java链接器
    该jlink工具的主要目标是“允许用户为他们的应用程序创建可执行文件”。

如果你对这些事情不太了解,不要担心。我们将在接下来的部分中详细讨论这些概念,并在我的后续帖子中提供一些有用的示例。

当前Java系统存在的问题?

在这一部分中,我们将讨论“为什么我们需要Java SE 9模块系统”,这意味着当前Java系统存在的问题。Java SE 8或更早的系统在开发或交付基于Java的应用程序时存在以下问题。

  • 由于JDK太大,很难缩小到小型设备。Java SE 8引入了3种紧凑型配置文件来解决此问题:compact1、compact2和compact3。但这并没有解决这个问题。
  • 像rt.jar等JAR文件太大,无法在小型设备和应用程序中使用。
  • 由于JDK太大,我们的应用程序或设备无法支持更好的性能。
  • 当前的Java系统中没有强封装,因为“public”访问修饰符太开放。任何人都可以访问它。
  • 由于JDK和JRE太大,测试和维护应用程序很困难。
  • 由于public太开放,他们无法避免访问一些内部非关键API,例如sun.*、*.internal.*等。
  • 由于用户也可以访问内部API,安全性也是一个大问题。
  • 应用程序太大。
  • 在组件之间支持较少耦合有些困难。

为了解决所有这些问题,Oracle公司将在Java SE 9发布中发布Java模块系统。

Java SE 9模块系统的优势

Java SE 9模块系统将提供以下好处

  • 由于Java SE 9将JDK、JRE、JAR等划分为更小的模块,我们可以使用任何我们需要的模块。因此,将Java应用程序缩小到小型设备非常容易。
  • 便于测试和维护。
  • 支持更好的性能。
  • 由于public不再仅限于public,它支持非常强大的封装(不用担心,这是一个大概念。我们将很快通过一些有用的例子来探讨它)。
  • 我们不能再访问内部的非关键API。
  • 模块可以非常安全地隐藏不需要的和内部的细节,从而提供更好的安全性。
  • 应用程序很小,因为我们只能使用我们需要的模块。
  • 支持组件之间的松耦合很容易。
  • 支持单一职责原则(SRP)很容易。

我们将很快逐一探讨所有这些概念。

比较JDK 8和JDK 9

我们知道 JDK 软件包含什么。在安装 JDK 8 软件后,我们可以在 Java 主目录中看到一些目录,如 bin、jre、lib 等。然而,Oracle 公司已经改变了这个文件夹的结构,如下所示。 JDK 8 文件夹结构: JDK 9 文件夹结构: 在 JDK 9 中,不包含 JRE。在 JDK 9 中,JRE 被分隔到一个单独的分发文件夹中。JDK 9 软件包含一个新文件夹“jmods”。它包含一组 Java 9 模块,如下所示。 在 JDK 9 中,没有 rt.jar 和 tools.jar 注意:截至今天,“jmods” 包含 95 个模块。在最终版本中可能会增加。 “jmods” 文件夹位于 ${JAVA_HOME}/jmods。这些被称为 JDK 模块。

什么是 Java 9 模块?

A Module is a self-describing collection of Code, Data, and some Resources. It is a set of related Packages, Types (classes, abstract classes, interfaces etc) with Code & Data and Resources. Each Module contains only a set of related code and data to support Single Responsibility (Functionality) Principle (SRP). The main goal of Java 9 Module System is to support Modular Programming in Java. We will discuss on “What is a Module Descriptor” and “How to develop Java Modules” in my coming posts.

Java 9 模块系统之母

截至目前,Java 9模块系统在早期访问JDK中有95个模块。Oracle公司已将JDK的jar文件和Java SE规范分为两组模块。

  • 所有JDK模块都以“jdk.*”开头
  • 所有Java SE规范模块都以“java.*”开头

Java 9模块系统有一个“java.base”模块。它被称为基础模块。它是一个独立模块,不依赖于任何其他模块。默认情况下,所有其他模块都依赖于此模块。这就是为什么“java.base”模块也被称为Java 9模块的母模块。它是所有JDK模块和用户定义模块的默认模块。

比较Java 8和Java 9应用程序

我们已经开发了许多使用Java 5、6、7或8的Java应用程序。我们知道Java 8或更早版本的应用程序是什么样子,以及它们包含什么。简而言之,我已经在下面的图表中描述了一个Java 8应用程序:在Java 8或更早版本的应用程序中,顶层组件是一个包。它将一组相关类型分组到一个组中。它还包含一组资源。Java 9应用程序与此没有太大区别。它只是引入了一个称为“模块”的新组件,用于将一组相关的包分组到一个组中。还有一个新组件叫做模块描述符(“module-info.java”)。就是这样。应用程序的其余部分与早期版本的应用程序相同,如下所示。就像Java 8应用程序将包作为顶层组件一样,Java 9应用程序将模块作为顶层组件。注意:- 每个Java 9模块只有一个模块和一个模块描述符。与Java 8包不同,我们不能将多个模块创建到一个单独的模块中。简而言之,我可以说Java 9模块包含以下主要组件:

  • 一个模块
  • 模块名称
  • 模块描述符
  • 一组包
  • 一组类型和资源

这里的资源可以是 module-info.java(模块描述符)或任何其他属性或 XML。我们在这篇文章中讨论了太多的理论。我认为这已经足够理解 Java 9 模块系统的基础知识了。我们将在接下来的帖子中开始一些基本的模块开发。我会根据需要讨论一些更多的理论概念或 Java 9 模块系统的术语。这就是关于“Java 9 模块系统简介”的全部内容了。我们将在接下来的帖子中讨论更多关于 Java SE 9 模块系统的概念。如果您喜欢我的文章或有任何问题/建议/打字错误,请给我留言。感谢阅读我的教程。祝愉快的 Java SE 9 学习!参考:Project Jigsaw

Source:
https://www.digitalocean.com/community/tutorials/java-9-modules