JDK模块化三之简单示例
JDK模块化系列文章
JDK的模块化之Overview
JDK模块化之模块的基础概念
JDK模块化之简单示例
JDK模块化之多模块示例
简单示例单模块HelloWorld-Module
以下示例都采用JDK 17,IDEA 2021.2进行开发。
主要步骤如下:
- 新建一个模块
- 命名模块
- 应用的文件结构
- 开发、运行、打包
图解:完全新建模块
新建Empty Project
项目
命名为Simple Module
,确定JDK为17,output路径设为mods。
新建模块com.donny.hello
。
在src
文件夹下,新建模块描述符 module-info.java
。命名模块名称:com.donny.hello
和依赖java.base
。
module com.donny.hello {
requires java.base;
}
新建包 com.donny.hello
,新建类HelloWorldApp
,输出Hello World! --From JAVA 17
。
public class HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World! --From JAVA 17");
}
}
此时整个软件工程目录如下:
点击”Run“ 运行项目,输出Hello World! --From JAVA 17
。
相关命令行
编译
请打开终端窗口并使用 cd
命令切换到此 SimpleModule
文件夹,然后键入:
javac -d .\mods\production\com.donny.hello\ .\com.donny.hello\src\module-info.java .\com.donny.hello\src\com\donny\hello\HelloWorldApp.java
linux下可以简写:
javac -d mods/production$(find com.donny.hello/src -name "*.java")
打包
使用 jar
命令将展开的模块文件夹打包为模块化 JAR 文件,其中包含所有模块文件,包括位于 JAR 根文件夹中的 module-info.class
文件。 运行应用程序时,需要在模块路径上指定 JAR 文件。
在文件夹下Simple Module
新建mlib
文件夹。
jar --create --file mlib/com.donny.hello@0.1.jar --module-version 0.1 --main-class com.donny.hello.HelloWorldApp -C mods/production/com.donny.hello .
相关选项如下:
--create
指定命令应该创建一个新的 JAR 文件。--file
或-f
指定 JAR 文件的名称,后跟名称 - 在这种情况下,将在文件夹中创建文件eg.com.taman.hello@0.1.jar
命名为“mlib”。--main-class
指定应用程序入口点的完全限定名称 - 一个包含main
方法的类。-C
指定哪个文件夹包含应该包含在 JAR 文件中的文件,然后是要包含的文件 - 点表示应该包含文件夹中的所有文件。
您可以使用简写符号 -cfe
后跟 JAR 文件名和主类来简化上述命令中的 --create
、--file
和 --main-class
选项,如下所示:
jar -cfe mlib/com.donny.hello.jar com.donny.hello.HelloWorldApp -C mods/production/com.donny.hello .
运行
--module-path
或 -p
(短划线)是模块路径; 它的值是一个或多个包含模块的目录。 -m
选项指定主模块,正斜杠后面的值是模块中主类的类名。
java --module-path mods/production -m com.donny.hello/com.donny.hello.HelloWorldApp
简写
java -p mods/production -m eg.com.taman.hello/eg.com.taman.hello.HelloWorldApp
运行jar
清除掉mlib/com.donny.hello@0.1.jar
,只保留mlib/com.donny.hello.jar
,执行以下命令。
java --module-path mlib -m com.donny.hello
或者
java -p mlib -m com.donny.hello
如果你在创建JAR时没有指定入口点,你仍然可以通过指定模块名和完全限定类名来运行应用程序,如下所示:
java --module-path mlib -m com.donny.hello.HelloWorldApp
或者
java -p mlib -m com.donny.hello.HelloWorldApp
查看模块化的JAR模块声明中的内容
JAR工具有许多新选项(参见jar --help
),其中一个选项是打印打包为模块化JAR的模块的模块声明信息。
jar --describe-module --file mlib/com.donny.hello.jar
简写
jar -d -f mlib/com.donny.hello.jar