JDK模块化之简单示例

Posted 顧棟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK模块化之简单示例相关的知识,希望对你有一定的参考价值。

JDK模块化三之简单示例

文章目录

简单示例单模块HelloWorld-Module

以下示例都采用JDK 17,IDEA 2021.2进行开发。

主要步骤如下:

  1. 新建一个模块
  2. 命名模块
  3. 应用的文件结构
  4. 开发、运行、打包

图解:完全新建模块

新建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

以上是关于JDK模块化之简单示例的主要内容,如果未能解决你的问题,请参考以下文章

JDK模块化之多模块示例

JDK模块化之多模块示例

python之argparse 模块

JDK8系列之Lambda表达式教程和示例

一个简单的汉字搜索匹配示例(支持拼音首字母简写)

JDK的模块化之Overview