1、准备
lib
mods
src/cn.gbase.hellomodule
src/cn.gbase.hellomodule/module-info.java
src/cn.gbase.hellomodule/cn/gbase/hellomodule/Welcome.java
//module-info.java module cn.gbase.hellomodule { }
package cn.gbasae.hellomodule; public class Welcome { public static void main(String[] args) { System.out.println("hello module in jdk9"); Class<Welcome> cls = Welcome.class; Module mod = cls.getModule(); String moduleName = mod.getName(); System.out.format("Module Name: %s%n", moduleName); } }
2、编译
javac -d mods/cn.gbase.hellomodule --module-version 1.0 src/cn.gbase.hellomodule/module-info.java src/cn.gbase.hellomodule/cn/gbase/hellomodule/*
编译结果
mods/cn.gbase.hellomodule/cn/gbasae/hellomodule/Welcome.class mods/cn.gbase.hellomodule/module-info.class
bogon:testModules rachelluo$ javap mods/cn.gbase.hellomodule/module-info.class Compiled from "module-info.java" module cn.gbase.hellomodule@1.0 { requires java.base; }
在JDK 9中增强了jar工具。它允许在创建模块化JAR时指定模块版本。
javac -d mods --module-source-path src $(find src -name "*.java")
3、打包
jar --create --file lib/cn.gbase.hellomodule-1.0.jar --main-class cn.gbase.hellomodule.Welcome --module-version 1.0 -C mods/cn.gbase.hellomodule .
bogon:testModules rachelluo$ ll lib
total 8
-rw-r--r-- 1 rachelluo staff 1587 10 3 20:42 cn.gbase.hellomodule-1.0.jar
bogon:testModules rachelluo$ java --module-path lib --list-modules cn.gbase.hellomodule
......
cn.gbase.hellomodule@1.0 file:///Users/rachelluo/Documents/workspace/testModules/lib/cn.gbase.hellomodule-1.0.jar
-
--create
选项表示要创建一个新的模块化JAR。 -
--file
选项用于指定新的模块化JAR的位置和名称。将新的模块化JAR保存在lib目录中,其名称将为cn.gbase.hellomodule1.0.jar。将模块化JAR的版本指定为1.0。 -
--main-class
选项指定public static void main(String[])
方法作为应用程序入口。当您指定此选项时,jar工具将在module-info.class文件中添加一个属性,其值是指定类的名称。 jar工具还使用此选项将Main-Class属性添加到MANIFEST.MF文件中。 -
--module-version
选项将模块的版本指定为1.0。 jar工具将把这些信息记录在module-info.class文件的属性中。请注意,将模块版本指定为1.0不会影响模块化JAR的名称。包含1.0以指示其文件名的版本。该模块的实际版本由此选项指定。 -
-C
选项用于指定执行jar命令时将用作设置当前目录。将mods\cn.gbase.hellomodule目录指定为jar工具的当前目录。这将使jar工具从该目录中读取所有要包含在模块化JAR中的文件。 - 命令的最后一部分是一个点(.),这意味着jar工具需要包括当前目录mods\cn.gbase.hellomodule下所有文件和目录。请注意,这个参数和
-C
选项一起使用。
4、运行
java --module-path <module-path> --module <module>/<main-class>
bogon:testModules rachelluo$ java --module-path lib --module cn.gbase.hellomodule/cn.gbase.hellomodule.Welcome hello module in jdk9 Module Name: cn.gbase.hellomodule bogon:testModules rachelluo$
如果在模块代码打包到模块化JAR中时指定主类,则可以从命令中省略主类名称
bogon:testModules rachelluo$ java --module-path lib --module cn.gbase.hellomodule hello module in jdk9 Module Name: cn.gbase.hellomodule bogon:testModules rachelluo$
还可以指定包含模块代码的目录作为模块路径。 已将模块代码编译到mods目录中
bogon:testModules rachelluo$ java --module-path mods --module cn.gbase.hellomodule/cn.gbase.hellomodule.Welcome hello module in jdk9 Module Name: cn.gbase.hellomodule
JDK还提供了-jar
选项来从JAR文件运行主类
bogon:testModules rachelluo$ java -jar lib/cn.gbase.hellomodule-1.0.jar hello module in jdk9 Module Name: null bogon:testModules rachelluo$ java --class-path lib/cn.gbase.hellomodule-1.0.jar cn.gbase.hellomodule.Welcome hello module in jdk9 Module Name: null
看来只有输出中的第一行是正确的,第二行是不正确的。 它找到了
main()
方法中执行了代码。 它正确打印消息,但模块名称为空。
需要了解JDK 9中java命令的行为。-jar
选项存在于JDK 9之前。在JDK 9中,类型作为模块的一部分,可以通过模块路径或类路径加载。如果通过类路径加载类型,则该类型成为未命名模块的成员。该类型从其原始模块中失去其成员资格,即使该类型是从模块化JAR加载的。实际上,如果一个模块化的JAR放置在类路径上,那么它被视为一个JAR(而不是一个模块化的JAR),忽略它的module-info.class文件。每个应用程序类加载器都有一个未命名的模块。类加载器从类路径加载的所有类型都是该类加载器的未命名模块的成员。一个未命名的模块也被表示为一个Module类的实例,该类的getName()
方法返回null。
相关推荐
**Java Development Kit (JDK) 9 中文开发帮助文档** JDK 9 是 Java 平台标准版(Java SE)的一个重要版本,引入了一系列新特性、改进和优化,旨在提高开发人员的效率和应用程序的性能。这个压缩包包含了 JDK 9 的...
**JDK9详解** JDK(Java Development Kit)是Oracle公司发布的用于开发Java应用程序的软件开发工具包。自1995年Java语言发布以来,JDK已经经历了多个版本的迭代,每个新版本都带来了新的特性和改进。JDK9是Java的一...
jdk7 jdk8 jdk9 jdk10 jdk11 jdk12 jdk13 jdk14 (win-64位) 资源共享
jdk9全版本 java9 Jdk9.zip
Java JDK 9是Java开发工具包的一个重要版本,由OpenJDK项目开发并维护,它在Java发展历程中引入了一系列创新特性和改进。本版本为Windows 64位免安装版,意味着用户无需经历传统安装过程,只需解压缩文件,然后进行...
离线JDK9中文版 | API_jdk-9.CHM
自用最全面,稳妥的文档,jdk 1.9api文档,内部包含中英文,方便查阅。 Java9可以说是一个庞大的系统工程。Java 的方方面面,包括 JDK 编译工具...这是用官方正式版本JDK9API文档制作的chm格式API手册,方便离线查阅。
jdk9中文API文档
JDK9 GC调优秘籍 JDK9 GC cheatsheet, 一张PDF包含所有的调优参数! 今天我们讲讲JDK9中的JVM GC调优参数,JDK9中JVM的参数总共有2142个,其中正式的参数有659个。好像比JDK8中的参数要少一点。 为了方便大家的参考...
Linux系统中的JDK9安装与使用详解 在Linux环境下,Java Development Kit(JDK)是进行Java编程的基础,而JDK9是Oracle公司发布的一个重要版本,它包含了许多新特性和改进。本教程将详细介绍如何在Linux系统中安装并...
官网 jdk6,jdk7,jdk8,jdk9,jdk10 windox 32位、64位、linux 32位、64位 百度云。
"jdk9_win_64"指的是适用于Windows 64位操作系统的JDK 9版本。这个版本是Oracle公司发布的一个重要更新,引入了许多新特性,改进了性能,并对Java平台进行了现代化改造。 1. **模块系统**:JDK 9 最显著的变化是...
在"jdk9 api 中文版"中,我们可以找到JDK 9的所有API的中文文档,这对于中文用户来说是一个极大的便利。文档通常分为多个部分,包括核心类库、JDBC、网络编程、多线程、I/O流、集合框架、国际化、安全管理等。以下是...
jdk9-64位官方安装版,上传不了超大附件,附上百度云盘链接,欢迎大家下载
jdk7 jdk8 jdk9 jdk10 jdk11 jdk12 jdk13 jdk14 (linux-rpm 64位) 资源共享
jdk9 java9 linux版 jdk-9.0.4_linux-x64_bin.tar.zip
适用平台:windows x64 jdk版本:9 安装方式:双击安装即可
jdk9 jdk-9.0.4_linux-x64_bin 网盘下载
jdk-9.0.1_windows-x64_bin.exe,Oracle-jdk9,JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具...
《深入理解Java JDK 9:基于中文谷歌翻译优化版》 在Java开发领域,JDK(Java Development Kit)是不可或缺的基础工具,它包含了Java运行环境和一系列用于开发Java应用程序的工具。本文将聚焦于JDK的第9个主要版本...