【JDK】module模块系统

news/2024/10/23 7:36:49/

JDK9新特性-module模块系统

  • Sources Root下新建module-info.java,内容格式如下所示
module modulename {//模块指令
}
  • modulename具有唯一性
  • 一个工程,即使是不同的Sources Root,仅能存在一个module-info.java
  • 模块体内可以保留空内容或者模块指令等内容,其指令类型包括requires、exports、provides…with、uses and opens,其涉及到的关键字包括exports、module、open、opens、provides、requires、uses、with,、to 、transitive

requires

  • 该指令的表示形式如:requires modulename,假如在A模块中使用该指令,modulename指定B模块名称,则其表示的意义是模块A依赖模块B。每个模块必须显式地声明其需要依赖的模块。也就是当模块A依赖模块B,模块A可读取模块B或者模块B可被模块A读取。
  • requires static指令的意义是,模块A在编译阶段依赖B,但在运行期间该依赖性是可选项。
module module2 {requires module1;// 如果引用了module1中的类,运行时会报java.lang.NoClassDefFoundError异常// requires static module1; 
}

requires transitive

该指令的表示形式如:requires transitive modulename,其表示隐式可读性,假如在A模块中使用该指令,modulename指定B模块名称,则其表示任何依赖A模块的模块都可以读取B模块。

exports and exports…to

  • 该指令的表示形式如:exports com.wen3.framework.jdk.module.module1,假如在A模块中使用该指令,其中com.wen3.framework.jdk.module.module1表示A模块提供的类包的名称,其表示的意义,任何依赖A模块的模块都可以读取com.wen3.framework.jdk.module.module1类包中公共类型,
  • exports org.exp to comma-separated-list-of-modules表示的意义,明确地将指定类包导出到指定的目标模块,多个模块以逗号分割。
module module1 {// 只有module1可以访问com.wen3.framework.jdk.module.module1包下的public classexports com.wen3.framework.jdk.module.module1 to module1;
}

uses

该指令的表示形式如:uses classA,假如在A模块中使用该指令,其中classA表示一个接口或者抽象类,其表示的意义是A模块是服务消费方,可以使用指定的服务classA,服务classA所在的模块是服务提供方。

provides…with

该指令的表示形式如:provides classA with classB,假如在A模块中使用该指令,其中classA 提供给uses指令使用,classB是服务实现类,A模块是服务提供方。

open, opens, and opens…to

该指令提供运行期可依赖、可反射的类包。

opens package to comma-separated-list-of-modules表示将指定的类包开放给指定的模块,多个模块以逗号分割。

开放模块的所有运行期可依赖类包,可以使用如下的方式:

open module modulename {// 开放模块里面不允许使用opens指令// opens com.wen3.framework.jdk.module.module1 to module2
}
  • open module里面,不允许再使用opens

查看JDK内建模块

$ java --list-modules
java.base@17.0.2
java.compiler@17.0.2    
java.datatransfer@17.0.2
java.desktop@17.0.2     
java.instrument@17.0.2  
java.logging@17.0.2     
java.management@17.0.2
java.management.rmi@17.0.2
java.naming@17.0.2
java.net.http@17.0.2
java.prefs@17.0.2
java.rmi@17.0.2
java.scripting@17.0.2
java.se@17.0.2
java.security.jgss@17.0.2
java.security.sasl@17.0.2
java.smartcardio@17.0.2
java.sql@17.0.2
java.sql.rowset@17.0.2
java.transaction.xa@17.0.2
java.xml@17.0.2
java.xml.crypto@17.0.2
jdk.accessibility@17.0.2
jdk.attach@17.0.2
jdk.charsets@17.0.2
jdk.compiler@17.0.2
jdk.crypto.cryptoki@17.0.2
jdk.crypto.ec@17.0.2
jdk.crypto.mscapi@17.0.2
jdk.dynalink@17.0.2
jdk.editpad@17.0.2
jdk.hotspot.agent@17.0.2
jdk.httpserver@17.0.2
jdk.incubator.foreign@17.0.2
jdk.incubator.vector@17.0.2
jdk.internal.ed@17.0.2
jdk.internal.jvmstat@17.0.2
jdk.internal.le@17.0.2
jdk.internal.opt@17.0.2
jdk.internal.vm.ci@17.0.2
jdk.internal.vm.compiler@17.0.2
jdk.internal.vm.compiler.management@17.0.2
jdk.jartool@17.0.2
jdk.javadoc@17.0.2
jdk.jcmd@17.0.2
jdk.jconsole@17.0.2
jdk.jdeps@17.0.2
jdk.jdi@17.0.2
jdk.jdwp.agent@17.0.2
jdk.jfr@17.0.2
jdk.jlink@17.0.2
jdk.jpackage@17.0.2
jdk.jshell@17.0.2
jdk.jsobject@17.0.2
jdk.jstatd@17.0.2
jdk.localedata@17.0.2
jdk.management@17.0.2
jdk.management.agent@17.0.2
jdk.management.jfr@17.0.2
jdk.naming.dns@17.0.2
jdk.naming.rmi@17.0.2
jdk.net@17.0.2
jdk.nio.mapmode@17.0.2
jdk.random@17.0.2
jdk.sctp@17.0.2
jdk.security.auth@17.0.2
jdk.security.jgss@17.0.2
jdk.unsupported@17.0.2
jdk.unsupported.desktop@17.0.2
jdk.xml.dom@17.0.2
jdk.zipfs@17.0.2

module编译

javac -d target/classes src/main/java/module-info.java src/main/java/com/wen3/framework/jdk/module/module1/Demo1Utils.java --module-path lombok -classpath xx.jar;xx2.jar

http://www.ppmy.cn/news/75247.html

相关文章

QT客户端外包开发的特点

QT是一种跨平台的C应用程序开发框架,主要用于开发图形用户界面(GUI)应用程序。它提供了一套丰富的类库和工具,可以帮助开发者快速构建高质量、可扩展、易于维护的应用程序。今天和大家分享一下QT的主要特点和注意的问题,希望对大家有所帮助。…

分享7款优质免费的Figma“中文插件”

今天我要向你们分享一些 Figma 的“中文插件”,这些插件不仅功能强大,而且免费使用,非常方便,而且是完全中文的页面使用起来非常便捷,可以大大提高设计师的效率和体验。 1、「平面 3D」 插件 首先是平面 3D 插件。该…

ETSI TS-关于SCP80

描述 GPC_UICC Configuration_v2.0.pdf 中: 规范 ts_102.225v12.1.0 Secured packet structure for UICC based applications.pdf spi kic kid编码 7 TCP/IP 的实现 在发送安全数据包之前,发送实体应使用定义的推送机制打开 TCP/IP 连接 在 ETSI TS 102 226 [9] …

【IDEA】DeBug(图文并茂)

文章目录 01_Debug简介和意义02_IDEA中的Debug步骤03_跳转到当前代码执行的行04_步过调试的使用05_步入调试的使用06_强制步入调试的使用07_步出调试的使用08_回退断点调试的使用09_运行到光标处10_计算表达式11_条件断点12_多线程调试 IDAEA(Interactive Data Anal…

人人可用的开源数据可视化分析工具

大家好,我是互联网架构师! 在互联网数据大爆炸的这几年,各类数据处理、数据可视化的需求使得 GitHub 上诞生了一大批高质量的 BI 工具。 借助这些 BI 工具,我们能够大幅提升数据分析效率、生成更高质量的项目报告,让用…

实时频谱-1.1基本概念

RF信号 RF(射频)是Radio Frequency的缩写,表示可以辐射到空间的电磁频率,频率范围从300KHz~30GHz之间。 中频 IF(intermediate frequency),用来在中频衡量AM或FM调谐器抑制外来干扰的能力,数…

短睡眠 堀大辅 超短眠 人生更丰富

堀大辅是位每天只睡半小时的日本狠人,更多信息自行百度。以下内容,个人收集总结,仅供参考。 堀大辅大胆假设「只要能够减少睡眠的时间,我就能过得更充实」,便与朋友付诸行动,通过纪录观察每天的睡眠时数&a…

网络安全的学习路线

在众多高大上的学习路线指导中,尝试做一股清流,把要讲清楚的都讲清楚,该学些什么,学到哪个程度进入到下一阶段的学习这些才是最重要的。 在学习之前首先要做好学习的系统规划: 1.目前市场需求主流的岗位里&#xff0…