前言
Java 9通过模块系统将零散的拼图拼凑到了一起,模块系统成了Java平台的核心而不是扩展功能。Java的模块系统必须有所妥协。它不仅要保持对大量现有代码的支持,使其不至于破坏现有的生态系统,还要为不断变化的世界中尚待编写的代码提供一些有意义的帮助。
从技术层面来说,你需要理解模块和依赖的本质,以及语法和组件化的细节;从设计角度来说,你需要了解使用模块所带来的好处与坏处。像任何概念或观点一样,模块化不可以随便地加入到项目之中,采用模块化需要更多的技术和思考。现有代码在更加模块化的世界中会有什么样的改变?模块化会如何影响部署和开发?你需要知道这些问题以及你所探索问题的答案。
Java 9将Java平台模块系统(JPMS)引入到Java语言及其生态系统中,从此所有Java开发者都可以使用模块化原语。对于包括我自己在内的大多数人而言,这些是全新的概念,所以本文会从头讲起——从设计动机和基本概念一直讲到高级特性,以帮助大家了解Java模块系统。
目录
本文主要内容
本文的结构有几个层次。所有章节划分为3个部分,但你不必按顺序阅读。我会按照你的需求来建议不同的阅读范围和阅读顺序。
本文共15章,分为3个部分。
第一部分展示了模块系统要改善的Java的不足之处,并解释了模块系统的基本机制,以及如何创建、构建和运行模块化应用程序。
第1章指出了Java在JAR层面缺乏对模块化的支持,讨论了该缺陷的负面影响以及模块系统如何处理这些缺陷。
第2章展示了如何构建和运行一个模块化应用程序,并且介绍了贯穿本文的应用程序示例。这一章展示的是模块系统的全景,不会探寻细节——这是后面3章要做的事情。
第4章展示了如何利用javac和jar命令编译和打包一个模块化项目。
第二部分抛开了完全模块化的理想项目,演示了如何将现有项目迁移到Java 9及以上版本,并且逐步将之模块化。
第6章探寻了将现有代码迁移到Java 9时人们普遍会遇到的障碍(尚未涉及任何模块创建)。
第7章讨论了两个额外的难题。单独讨论是因为它们不局限于迁移,在对项目完成迁移和模块化后,你很可能依然会遇到它们。
第三部分展示了构建于第一部分所介绍的基本概念之上的高级特性。
第10章讲述了模块系统如何对API的提供者和使用者进行隔离。
第12章讨论了反射是如何被拉下神坛的,开发者需要什么样的应用程序、库和框架以使反射代码工作,以及一些新的扩展反射API的强力特性。