阅读(1134) (9)

通过Java 9模块系统入门

2018-08-17 13:49:57 更新

通过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。 

Jigsaw创建模块信息

创建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文件已经声明为项目依赖项。 

Jigsaw从模块信息中添加依赖项

从另一个方向,我们可以编写我们的java代码。IntelliJ IDEA将建议将其他模块添加为对当前模块的依赖,然后还建议我们添加requires声明。 

Jigsaw从代码中添加依赖项

运行模块

在IntelliJ IDEA中运行类时(使用快捷键Ctrl+Shift+F10),将使用Java平台模块中声明的信息。这意味着IntelliJ IDEA将使用模块路径而不是类路径运行JVM。这将强制执行我们从模块系统获得的强封装,然后我们可能会遇到的任何依赖性问题都会被此次运行重现。