JLink工具在Java 9中是什么?

JLink 工具在 Java 9 中是什么?

1. JLink 工具简介

JLink 是 Java 9 中的一个新工具,它让我们能够创建一个自包含的运行时图像。这意味着它会包含所有需要运行的模块,不需要安装额外的组件。JLink 工具的优点如下:

- 可以创建一个小型的运行时镜像,可以定制 JVM 配置,并且可以排除不需要的模块。

- 由 JLink 工具创建的自包含可执行文件是完全独立的,不需要安装 JDK 或 JRE。

- JLink 工具生成的镜像可以被一些轻量级系统(如嵌入式系统)用于运行。

2. JLink 工具使用方式

JLink 工具需要指定一个模块路径(module path),然后指定需要包含在镜像中的模块。我们可以使用以下命令创建自包含的可执行文件。

jlink --module-path /path/to/modules --add-modules module_name --output /path/to/image

上述命令中的 `—module-path` 参数指定模块路径,在 Windows 上可能需要使用反斜杠作为路径分隔符。 `--add-modules` 参数指定需要包含的模块的名称,可以使用逗号分隔。 使用 `--output` 提供的路径指定生成的自包含可执行文件的输出路径以及文件名。

2.1 示例

为了使用JLink工具,将创建一个包含一个模块 `com.java.example` 的最小的示例。

创建目录结构如下:

example

│───src

│ └───com.java.example

│ └───com

│ └───java

│ └───example

│ └───Main.java

│───module-info.java

2.2 引导模块 (module-info文件)

`module-info.java` 文件定义包含两个模块的程序的模块化结构,并将 `com.java.example` 模块指定为该程序的引导模块。

module java.cli.main {

requires com.java.example;

}

注意,模块化结构对于使用 JLink 工具生成自包含的映像是必需的。

2.3 模块 (Main文件)

`Main.java` 文件代码如下:

package com.java.example;

public class Main {

public static void main(String[] args) {

System.out.println("Hello, World!");

}

}

2.4 生成自包含映像

生成自包含映像,可以使用下面的命令:

jlink --module-path "/path/to/your-jdk/jmods:/path/to/your-example-folder/out/production/example"

--add-modules java.desktop,com.java.example

--launcher example=com.java.example/com.java.example.Main

--output example-image

我们指定了 JDK 的模块路径和示例程序的路径。`--add-modules` 参数指定了需要包含的模块。除了 `com.java.example` 模块,我们还添加了 `java.desktop` 模块。 我们设置了一个启动器,通常是 `java` 命令,但现在我们将其命名为 `example`。命令 `--output` 指定映像的生成目录和文件名。

3. JLink 工具中排除不必要的模块

JLink 工具可以通过以下命令来排除不需要的模块:

jlink --module-path /path/to/modules --add-modules module_name --output /path/to/image --exclude-files path/to/excludelist.txt

其它参数与之前相同。excludelist.txt 包含排除的模块的名称列表,每行一条记录。

JLink 工具通过使用 `Linker` API 完成操作。Linker API 用于将解析的模块连接起来并创建一个计算机可以解释的图片。Linker API 实现了由模块描述符集成的连接器,并提供了插件,以便我们可以使用自定义逻辑来指定要包含或排除的模块。

4. 总结

JLink 工具是为 Java 9 引入的。此工具使得我们能够创建小型的、自包含的运行时映像,无需其他组件的安装。JLink 工具使用方便,只需要指定模块路径和需要包含的模块即可。此外,我们还可以使用 excludelist.txt 自动生成排除不必要的模块。JLink 工具可以使应用程序更加轻便,适用于一些嵌入式设备以及其他一些运行空间受限的系统中。

后端开发标签