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。
相关推荐
JDK 9是Oracle公司发布的一个重要版本,它引入了许多新特性,旨在提高性能、可移植性和安全性。下面我们将详细探讨JDK 9的一些关键知识点。 1. 模块系统(Project Jigsaw) JDK 9最大的变化之一就是引入了模块系统...
**Java Development Kit (JDK) 9 中文 API 文档** Java Development Kit (JDK) 是 Java 编程语言的核心工具集,它包含了编译器、JVM(Java Virtual Machine)、调试工具以及其他必要的开发组件。JDK 9 是 Oracle ...
**JDK9详解** JDK(Java Development Kit)是Oracle公司发布的用于开发Java应用程序的软件开发工具包。自1995年Java语言发布以来,JDK已经经历了多个版本的迭代,每个新版本都带来了新的特性和改进。JDK9是Java的一...
**Java Development Kit (JDK) 9 中文开发帮助文档** JDK 9 是 Java 平台标准版(Java SE)的一个重要版本,引入了一系列新特性、改进和优化,旨在提高开发人员的效率和应用程序的性能。这个压缩包包含了 JDK 9 的...
jdk7 jdk8 jdk9 jdk10 jdk11 jdk12 jdk13 jdk14 (win-64位) 资源共享
Java JDK 9是Java开发工具包的一个重要版本,由OpenJDK项目开发并维护,它在Java发展历程中引入了一系列创新特性和改进。本版本为Windows 64位免安装版,意味着用户无需经历传统安装过程,只需解压缩文件,然后进行...
标题中的"java-jdk9-jdk-9.0.1-windows-x64-bin.zip"明确指出这是针对JDK 9.0.1的Windows x64位系统的二进制文件压缩包。"bin"表示其中包含的是可执行文件,这意味着用户可以直接运行这些文件来执行特定的任务,如...
JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。 SE(J2SE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。 EE(J2EE),enterprise edition,企业版,...
总的来说,"JDK 帮助文档、jdk-9_doc-api-google.rar" 提供的JDK 9离线中文文档,对于所有Java开发者来说都是宝贵的资源,它能够帮助开发者充分利用JDK 9的新特性,提升开发水平。解压后直接使用,无论是学习还是...
《Java JDK 9 API 中文文档详解》 Java Development Kit(JDK)是Java编程语言的核心组成部分,提供了编译、运行Java程序所需的所有工具和库。JDK 9是Java平台的一个重大版本更新,带来了许多新特性、改进和优化。...
官网 jdk6,jdk7,jdk8,jdk9,jdk10 windox 32位、64位、linux 32位、64位 百度云。
Linux系统中的JDK9安装与使用详解 在Linux环境下,Java Development Kit(JDK)是进行Java编程的基础,而JDK9是Oracle公司发布的一个重要版本,它包含了许多新特性和改进。本教程将详细介绍如何在Linux系统中安装并...
JDK 9 是Oracle公司发布的一个重要版本,但在撰写此文章时,官方可能已经不再提供该版本的直接下载,这可能是由于软件更新迭代,官方通常会鼓励用户使用最新版本以获取更好的安全性和性能。 JDK 9中引入了许多新...
jdk9-64位官方安装版,上传不了超大附件,附上百度云盘链接,欢迎大家下载
"jdk9_win_64"指的是适用于Windows 64位操作系统的JDK 9版本。这个版本是Oracle公司发布的一个重要更新,引入了许多新特性,改进了性能,并对Java平台进行了现代化改造。 1. **模块系统**:JDK 9 最显著的变化是...
jdk7 jdk8 jdk9 jdk10 jdk11 jdk12 jdk13 jdk14 (linux-rpm 64位) 资源共享
在"jdk9 api 中文版"中,我们可以找到JDK 9的所有API的中文文档,这对于中文用户来说是一个极大的便利。文档通常分为多个部分,包括核心类库、JDBC、网络编程、多线程、I/O流、集合框架、国际化、安全管理等。以下是...
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个主要版本...