前言

Java 9通过模块系统将零散的拼图拼凑到了一起,模块系统成了Java平台的核心而不是扩展功能。Java的模块系统必须有所妥协。它不仅要保持对大量现有代码的支持,使其不至于破坏现有的生态系统,还要为不断变化的世界中尚待编写的代码提供一些有意义的帮助。

从技术层面来说,你需要理解模块和依赖的本质,以及语法和组件化的细节;从设计角度来说,你需要了解使用模块所带来的好处与坏处。像任何概念或观点一样,模块化不可以随便地加入到项目之中,采用模块化需要更多的技术和思考。现有代码在更加模块化的世界中会有什么样的改变?模块化会如何影响部署和开发?你需要知道这些问题以及你所探索问题的答案。

Java 9将Java平台模块系统(JPMS)引入到Java语言及其生态系统中,从此所有Java开发者都可以使用模块化原语。对于包括我自己在内的大多数人而言,这些是全新的概念,所以本文会从头讲起——从设计动机和基本概念一直讲到高级特性,以帮助大家了解Java模块系统。

目录

 

本文主要内容

本文的结构有几个层次。所有章节划分为3个部分,但你不必按顺序阅读。我会按照你的需求来建议不同的阅读范围和阅读顺序。

本文共15章,分为3个部分。

第一部分展示了模块系统要改善的Java的不足之处,并解释了模块系统的基本机制,以及如何创建、构建和运行模块化应用程序。

第1章指出了Java在JAR层面缺乏对模块化的支持,讨论了该缺陷的负面影响以及模块系统如何处理这些缺陷。

 

 

第2章展示了如何构建和运行一个模块化应用程序,并且介绍了贯穿本文的应用程序示例。这一章展示的是模块系统的全景,不会探寻细节——这是后面3章要做的事情。

 

 

第3章介绍了作为基本构建单元的模块声明,以及模块系统如何处理模块声明以实现它最重要的目标:让项目更加可靠、更容易维护。

 

 

第4章展示了如何利用javac和jar命令编译和打包一个模块化项目。

 

 

第5章讲述了java命令的一些新选项。启动一个模块化应用程序很简单,因此这一章主要展示发现并解决问题所需要的工具。

 

 

第二部分抛开了完全模块化的理想项目,演示了如何将现有项目迁移到Java 9及以上版本,并且逐步将之模块化。

第6章探寻了将现有代码迁移到Java 9时人们普遍会遇到的障碍(尚未涉及任何模块创建)。

 

 

第7章讨论了两个额外的难题。单独讨论是因为它们不局限于迁移,在对项目完成迁移和模块化后,你很可能依然会遇到它们。

 

 

第8章展示了如何对运行于Java 9上的大型项目进行模块化改造。好消息是,你没必要一次性完成这个工作。

 

 

第9章总结了前面3章的内容,帮助人们制定迁移和模块化现有代码的策略。

 

 

第三部分展示了构建于第一部分所介绍的基本概念之上的高级特性。

第10章讲述了模块系统如何对API的提供者和使用者进行隔离。

 

 

第11章扩展了第3章介绍的基本依赖和访问机制,为实现现实世界中的复杂场景提供了灵活性。

 

 

第12章讨论了反射是如何被拉下神坛的,开发者需要什么样的应用程序、库和框架以使反射代码工作,以及一些新的扩展反射API的强力特性。

 

 

第13章解释了为什么模块系统通常会忽略版本信息、它对版本的有限支持,以及运行同一个模块的多个版本的可行性——尽管这很复杂,但的确可行。

 

 

第14章利用所需的模块创建自己的运行时镜像,展示了如何从模块化JDK中受益,也通过将模块化应用程序打包到镜像中并制作单一的部署单元,展示了如何从模块化应用程序中受益。

 

 

第15章利用第三部分的所有花哨功能,展示了第2章所介绍的应用程序的全貌,并且为如何更好地利用模块系统提供了建议。

 

 

需要这份557页【深入理解Java模块系统】文档的小伙伴,,可以转发此文关注小编,扫码下方来获取!!

本书读者

模块系统是一个非常有意思的话题。它的基本原理和概念都很简单,但是对整个Java生态系统的影响很深远。模块系统不像lambda表达式那样可以让人立即兴奋起来,但是可以像它那样彻底改变整个Java生态系统。到目前为止,模块系统已经像编译器、private访问修饰符、if条件语句一样成了Java的一部分。每个开发者都需要了解这些Java概念,同样,他们也需要了解模块系统。

值得庆幸的是,模块系统的入门很简单。模块系统的核心只有几个简单的概念,任何具备Java基础知识的开发者都可以理解。如果你知道访问修饰符的工作原理,粗略地了解如何使用javac、jar和java,并且知道JVM怎样从JAR文件中加载类,那么基本上就满足入门条件了。

如果你就是这样一位开发者,并且喜欢接受挑战,那么我鼓励你阅读本文。你不一定能马上融会贯通,但能够深入理解模块系统,并进一步理解Java生态系统。

另一方面,对模块系统的融会贯通,需要有两三年的Java项目开发经验。一般而言,你做过的项目越大,在架构演进、依赖选择,以及解决错误依赖带来的问题等方面参与得越深,你就越会感激模块系统带来的好处。同时,这也有助于你广泛地审视模块系统对已有项目以及Java生态系统的影响。