codecamp

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

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。这将强制执行我们从模块系统获得的强封装,然后我们可能会遇到的任何依赖性问题都会被此次运行重现。

迁移到Java 8
IntelliJ IDEA关联范围与版权配置文件
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

IntelliJ IDEA的一般准则

什么是IntelliJ IDEA项目

使用IntelliJ IDEA的意图行为

IntelliJ IDEA使用运行/调试配置

特定于VCS的程序

IntelliJ IDEA语言和特定框架指南

IntelliJ IDEA的数据库和SQL功能

IntelliJ IDEA使用之JavaServer Faces(JSF)

IntelliJ IDEA:分析PHP应用程序的性能

IntelliJ IDEA:调试PHP应用程序

IntelliJ IDEA:适用于PHP的Google App Engine

IntelliJ IDEA更多内容

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }