JDK9及之后版本使用 jlink 生成定制化的 JRE
许多java软件的运行需要依赖jre,在 jdk8 之后,不再提供默认的 jre,后续如果项目中还是想用 jre 的形式发布软件,那么可以使用 jlink 工具生成 jre。
一、**j**link 命令详解
jlink
二、查看**jdk**中包含的所有模块
如果在 jdk 安装文件夹下执行下述命令,可以看到其中包含的模块,模块所在文件夹与bin同级,文件夹名为jmods,下述是详细使用步骤图示。
bin\java --list-modules
1.**打开“jdk”安装文件夹,输入“cmd”后点击回车**
2.**在dos控制台窗口中输入下述命令,即可查看jdk中包含的所有模块**
bin\java --list-modules
#
结果如: jdk 11
jdk.internal.vm.compiler@11.0.19
jdk.internal.vm.compiler.management@11.0.19
jdk.scripting.nashorn.shell@11.0.19
jdk.unsupported.desktop@11.0.19
结果如: jdk 17
jdk.internal.vm.compiler@17.0.9
jdk.internal.vm.compiler.management@17.0.9
jdk.unsupported.desktop@17.0.9
三、使用 jlink 工具生成 jre
可以在 jdk 安装文件夹下使用以下命令(windows)生成 myjre
bin\jlink --module-path jmods --add-modules java.base,java.desktop --output myjre
linux系统执行以下命令生成 myjre:
./bin/jlink.exe --module-path jmods --add-modules java.desktop --output myjre
注:
1.如果JDK安装文件夹在C:\Program Files\Java\jdk11.0.18,由于系统权限问题无法生成,需要将JDK安装文件夹复制到其他目录中。
2.这条命令是使用Java的jlink工具来创建一个包含java.desktop模块的自定义的运行时映像(JRE),并将其输出到名为myjre的文件夹中。以下逐一解析这条命令的各个部分:
2.1 **bin\jlink.exe**:这是jlink工具的执行路径。jlink是Java 9及更高版本中引入的一个工具,它允许开发者创建一个自定义的JRE,只包含他们需要的Java模块。
2.2 **—module-path jmods**:这个选项指定了模块路径。jmods目录应该包含.jmod文件,这些文件描述了Java的模块。
2.3 **—add-modules java.desktop**:这个选项指定了需要包含在自定义JRE中的模块。在这个例子中,我们添加了java.desktop模块。这意味着JRE将包含该模块及其依赖项。
2.4 **—output myjre**:这个选项指定了输出目录,即生成的JRE将被放置的位置。在这个例子中,输出的是名为myjre的文件夹。
生成后的jre所在文件夹为myjre,在myjre文件夹下执行下述命令来查看 myjre 中添加的模块。
bin\java --list-modules
四、NoClassDefFound错误原因及解决方法
如果在使用自定义的 jre 运行 java 程序时,出现 NoClassDefFound 错误
原因:jre 中没有添加相关的模块。
解决方法: 首先,需要确定缺少的 class 存在于那个 jdk module 中,然后在 jlink 命令中添加到 —add-modules 列表中,重新生成 jre 就可以了。
还没有评论,来说两句吧...