前言

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的强力特性。