通过Java 9模块系统入门
通过Java 9模块系统入门
下面讨论的功能基于IntelliJ IDEA和JDK 9的早期访问版本,并且可能在将来发生变化。
Java平台模块系统(JSR 376)又称Project Jigsaw,目标是成为JDK 9版本的一部分。JSR描述的系统目标是:
- 可靠的配置,用一种程序组件声明彼此之间显式依赖关系的方法取代脆弱的、容易出错的类路径机制
- 强大的封装,允许组件声明其中哪些公共类型可供其他组件访问,哪些不可访问。
IntelliJ IDEA已经有一个项目模块的概念。每个IntelliJ IDEA模块都构建自己的类路径。
随着新的Java平台模块系统的引入,如果使用Java平台的模块路径而不是类路径,IntelliJ IDEA模块必须通过支持Java平台的模块路径来扩展其功能。
在本教程中,我们将探讨IntelliJ IDEA在创建和使用Java平台模块方面提供的帮助,以及这些模块如何与IntelliJ IDEA模块协同工作。
创建一个模块
在IntelliJ IDEA中创建模块后,我们可以通过在模块源目录下创建module-info.java文件将其定义为Java平台模块。
每个IntelliJ IDEA模块最多只能有一个Java平台模块。我们可以通过选择我们想要创建它的源目录并使用菜单选项:New|module-info.java(New | module-info.java)为我们的模块创建一个新的module-info.java。
创建module-info.java声明文件时,IntelliJ IDEA将选择IntelliJ IDEA模块的名称作为Java Platform模块的默认名称。这可以更改,不需要匹配。
使用模块
与所有java文件类型一样,IntelliJ IDEA帮助我们对module-info.java内容进行自动完成和有效性检查。
需要在IntelliJ IDEA和Java Platform(Jigsaw)模块中定义模块的依赖关系。 IntelliJ IDEA帮助我们保持同步。 要定义项目模块之间的依赖关系,我们可以在module-info.java中编写一个requires声明,然后IntelliJ IDEA会建议我们将它作为依赖项添加到其模块中。 这也适用于库依赖项,但前提是库jar文件已经声明为项目依赖项。
从另一个方向,我们可以编写我们的java代码。IntelliJ IDEA将建议将其他模块添加为对当前模块的依赖,然后还建议我们添加requires声明。
运行模块
在IntelliJ IDEA中运行类时(使用快捷键Ctrl+Shift+F10),将使用Java平台模块中声明的信息。这意味着IntelliJ IDEA将使用模块路径而不是类路径运行JVM。这将强制执行我们从模块系统获得的强封装,然后我们可能会遇到的任何依赖性问题都会被此次运行重现。