JDK9及之后版本使用 jlink 生成定制化的 JRE

许多java软件的运行需要依赖jre,在 jdk8 之后,不再提供默认的 jre,后续如果项目中还是想用 jre 的形式发布软件,那么可以使用 jlink 工具生成 jre。

一、jlink 命令详解

jlink

二、查看jdk中包含的所有模块

如果在 jdk 安装文件夹下执行下述命令,可以看到其中包含的模块,模块所在文件夹与bin同级,文件夹名为jmods,下述是详细使用步骤图示。

bin\java --list-modules

1.打开“jdk”安装文件夹,输入“cmd”后点击回车

2.dos控制台窗口中输入下述命令,即可查看jdk中包含的所有模块

bin\java --list-modules

 

结果如: jdk 11

java.base@11.0.19

java.compiler@11.0.19

java.datatransfer@11.0.19

java.desktop@11.0.19

java.instrument@11.0.19

java.logging@11.0.19

java.management@11.0.19

java.management.rmi@11.0.19

java.naming@11.0.19

java.net.http@11.0.19

java.prefs@11.0.19

java.rmi@11.0.19

java.scripting@11.0.19

java.se@11.0.19

java.security.jgss@11.0.19

java.security.sasl@11.0.19

java.smartcardio@11.0.19

java.sql@11.0.19

java.sql.rowset@11.0.19

java.transaction.xa@11.0.19

java.xml@11.0.19

java.xml.crypto@11.0.19

jdk.accessibility@11.0.19

jdk.attach@11.0.19

jdk.charsets@11.0.19

jdk.compiler@11.0.19

jdk.crypto.cryptoki@11.0.19

jdk.crypto.ec@11.0.19

jdk.crypto.mscapi@11.0.19

jdk.dynalink@11.0.19

jdk.editpad@11.0.19

jdk.hotspot.agent@11.0.19

jdk.httpserver@11.0.19

jdk.internal.ed@11.0.19

jdk.internal.jvmstat@11.0.19

jdk.internal.le@11.0.19

jdk.internal.opt@11.0.19

jdk.internal.vm.ci@11.0.19

jdk.internal.vm.compiler@11.0.19

jdk.internal.vm.compiler.management@11.0.19

jdk.jartool@11.0.19

jdk.javadoc@11.0.19

jdk.jcmd@11.0.19

jdk.jconsole@11.0.19

jdk.jdeps@11.0.19

jdk.jdi@11.0.19

jdk.jdwp.agent@11.0.19

jdk.jfr@11.0.19

jdk.jlink@11.0.19

jdk.jshell@11.0.19

jdk.jsobject@11.0.19

jdk.jstatd@11.0.19

jdk.localedata@11.0.19

jdk.management@11.0.19

jdk.management.agent@11.0.19

jdk.management.jfr@11.0.19

jdk.naming.dns@11.0.19

jdk.naming.ldap@11.0.19

jdk.naming.rmi@11.0.19

jdk.net@11.0.19

jdk.pack@11.0.19

jdk.rmic@11.0.19

jdk.scripting.nashorn@11.0.19

jdk.scripting.nashorn.shell@11.0.19

jdk.sctp@11.0.19

jdk.security.auth@11.0.19

jdk.security.jgss@11.0.19

jdk.unsupported@11.0.19

jdk.unsupported.desktop@11.0.19

jdk.xml.dom@11.0.19

jdk.zipfs@11.0.19

结果如: jdk 17

java.base@17.0.9

java.compiler@17.0.9

java.datatransfer@17.0.9

java.desktop@17.0.9

java.instrument@17.0.9

java.logging@17.0.9

java.management@17.0.9

java.management.rmi@17.0.9

java.naming@17.0.9

java.net.http@17.0.9

java.prefs@17.0.9

java.rmi@17.0.9

java.scripting@17.0.9

java.se@17.0.9

java.security.jgss@17.0.9

java.security.sasl@17.0.9

java.smartcardio@17.0.9

java.sql@17.0.9

java.sql.rowset@17.0.9

java.transaction.xa@17.0.9

java.xml@17.0.9

java.xml.crypto@17.0.9

jdk.accessibility@17.0.9

jdk.attach@17.0.9

jdk.charsets@17.0.9

jdk.compiler@17.0.9

jdk.crypto.cryptoki@17.0.9

jdk.crypto.ec@17.0.9

jdk.crypto.mscapi@17.0.9

jdk.dynalink@17.0.9

jdk.editpad@17.0.9

jdk.hotspot.agent@17.0.9

jdk.httpserver@17.0.9

jdk.incubator.foreign@17.0.9

jdk.incubator.vector@17.0.9

jdk.internal.ed@17.0.9

jdk.internal.jvmstat@17.0.9

jdk.internal.le@17.0.9

jdk.internal.opt@17.0.9

jdk.internal.vm.ci@17.0.9

jdk.internal.vm.compiler@17.0.9

jdk.internal.vm.compiler.management@17.0.9

jdk.jartool@17.0.9

jdk.javadoc@17.0.9

jdk.jcmd@17.0.9

jdk.jconsole@17.0.9

jdk.jdeps@17.0.9

jdk.jdi@17.0.9

jdk.jdwp.agent@17.0.9

jdk.jfr@17.0.9

jdk.jlink@17.0.9

jdk.jpackage@17.0.9

jdk.jshell@17.0.9

jdk.jsobject@17.0.9

jdk.jstatd@17.0.9

jdk.localedata@17.0.9

jdk.management@17.0.9

jdk.management.agent@17.0.9

jdk.management.jfr@17.0.9

jdk.naming.dns@17.0.9

jdk.naming.rmi@17.0.9

jdk.net@17.0.9

jdk.nio.mapmode@17.0.9

jdk.random@17.0.9

jdk.sctp@17.0.9

jdk.security.auth@17.0.9

jdk.security.jgss@17.0.9

jdk.unsupported@17.0.9

jdk.unsupported.desktop@17.0.9

jdk.xml.dom@17.0.9

jdk.zipfs@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 就可以了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/584885.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop之Yarn 详细教程

1、yarn 的基本介绍和产生背景 YARN 是 Hadoop2 引入的通用的资源管理和任务调度的平台,可以在 YARN 上运行 MapReduce、Tez、Spark 等多种计算框架,只要计算框架实现了 YARN 所定义的 接口,都可以运行在这套通用的 Hadoop 资源管理和任务调…

【经典算法】有趣的算法之---蚁群算法梳理

every blog every motto: You can do more than you think. 0. 前言 蚁群算法记录 1. 简介 蚁群算法(Ant Clony Optimization, ACO)是一种群智能算法,它是由一群无智能或有轻微智能的个体(Agent)通过相互协作而表现出智能行为,从而为求解复杂问题提供了一个新的可能性…

VSCode远程开发配置

目录 概要远程开发插件安装开始连接SSH无密码登录开发环境配置 概要 现在很多公司都是直接远程到服务器上写代码,使用远程开发,可以在与生产环境相同的环境中开发、测试和部署代码,减少因环境不同而导致的问题。当下VSCode远程开发是支持的比…

ClickHouse基础知识(六):ClickHouse的副本配置

副本的目的主要是保障数据的高可用性,即使一台 ClickHouse 节点宕机,那么也可以 从其他服务器获得相同的数据。 1. 副本写入流程 2. 配置步骤 ➢ 启动 zookeeper 集群 ➢ 在hadoop101的/etc/clickhouse-server/config.d目录下创建一个名为metrika.xml…

002文章解读与程序——中国电机工程学报EI\CSCD\北大核心《计及源荷不确定性的综合能源生产单元运行调度与容量配置两阶段随机优化》已提供下载资源

👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆下载资源链接&#x1f4…

Collector收集器的高级用法

Collectors收集器的高级用法 场景1:获取关联的班级名称 原先如果需要通过关联字段拿到其他表的某个字段,只能遍历List匹配获取 for (Student student : studentList) {Long clazzId student.getClazzId();// 遍历班级列表,获取学生对应班级…

HarmonyOS4.0系统性深入开发08服务卡片架构

服务卡片概述 服务卡片(以下简称“卡片”)是一种界面展示形式,可以将应用的重要信息或操作前置到卡片,以达到服务直达、减少体验层级的目的。卡片常用于嵌入到其他应用(当前卡片使用方只支持系统应用,如桌…

鸿鹄电子招投标系统:基于Spring Boot、Mybatis、Redis和Layui的企业电子招采平台源码与立项流程

在数字化时代,企业需要借助先进的数字化技术来提高工程管理效率和质量。招投标管理系统作为企业内部业务项目管理的重要应用平台,涵盖了门户管理、立项管理、采购项目管理、采购公告管理、考核管理、报表管理、评审管理、企业管理、采购管理和系统管理等…

服务器被入侵后如何查询连接IP以及防护措施

目前越来越多的服务器被入侵,以及攻击事件频频的发生,像数据被窃取,数据库被篡改,网站被强制跳转到恶意网站上,网站在百度的快照被劫持等等的攻击症状层出不穷,在这些问题中,如何有效、准确地追…

使用Vscode远程debug报错找不到Module找不到File

1..报第一个错 提示我无法导入自己写的module 如图: 解决办法: stackoverflow上说的在launch.json中加了一条 env,就解决了。 "env": { "PYTHONPATH":"/home/zt/ge-sc-master/ge-sc-master"}, 2.解决完第一个…

软件测试/测试开发丨Python、pycharm 安装与环境配置

Python 安装与环境配置 1. Python 安装 版本推荐 3.10.0下载地址:www.python.org/downloads/w… 若需要安装旧版本,在页面下方选择对应版本即可,MacOS选择对应系统即可 图示下载windows 3.11.4版本 安装Python 执行安装程序,安…

numpy数组03-数组的计算

一.数组与数字之间进行计算 numpy中的数组与数字进行计算是广播形式,数组-*/数字,则数组中的每一个数字都会进行相应的四则运算。 1.1数组与数字之间的四则运算 示例代码如下: import numpy as npa np.arange(24) b a.reshape(4, 6) pr…

【Maven】<scope>provided</scope>

在Maven中,“provided”是一个常用的依赖范围,它表示某个依赖项在编译和测试阶段是必需的,但在运行时则由外部环境提供,不需要包含在最终的项目包中。下面是对Maven scope “provided”的详细解释: 编译和测试阶段可用…

帆软FineBi V6版本经验总结

帆软FineBi V6版本经验总结 BI分析出现背景 ​ 现在是一个大数据的时代,每时每刻都有海量的明细数据出现。这时大数据时代用户思维是:1、数据的爆炸式增长,人们比起明细数据,更在意样本的整体特征、相互关系。2、基于明细的“小…

数据结构之树 --- 二叉树

目录 定义二叉树的结构体 二叉树的遍历 递归遍历 非递归遍历 链式二叉树的实现 二叉树的功能接口 先序遍历创建二叉树 后序遍历销毁二叉树 先序遍历查找树中值为x的节点 层序遍历 上篇我们对二叉树的顺序存储堆进行了讲述,本文我们来看链式二叉树。 定…

SpringCloud(H版alibaba)框架开发教程之nacos做配置中心——附源码(2)

上篇主要讲了使用eureka,zk,nacos当注册中心 这篇内容是nacos配置中心 代码改动部分mysql驱动更新到8.0,数据库版本升级到了8.0,nacos版本更新到了2.x nacos2.x链接 链接:https://pan.baidu.com/s/11nObzgTjWisAfOp…

探秘交互设计:深入了解五大核心维度!

交互式设计是用户体验(UX)设计的重要组成部分。本文将解释什么是交互设计,并分享一些有用的交互设计模型,并简要描述交互设计师通常做什么。 如何解释交互设计 交互式设计可以用一个简单的术语来理解:它是用户和产品…

借贷协议 Tonka Finance:铭文资产流动性的新破局者

“Tonka Finance 是铭文赛道中首个借贷协议,它正在为铭文资产赋予捕获流动性的能力,并为其构建全新的金融场景。” 在 2023 年的 1 月,比特币 Ordinals 协议被推出后,包括 BRC20,Ordinals 等在内的系列铭文资产在包括比…

nginx源码分析-3

这一章内容讲述nginx中的事件是如何一步步添加到epoll实例中的。 在初始化http连接的函数ngx_http_init_connection中,nginx为http连接初始化了处理请求的回调函数,之后调用ngx_handle_read_event函数对可读数据进行处理。这里只为连接设置read而没有设…

Ubuntu22.04 安装教程

系统下载 Ubuntu官网下载 清华源镜像 安装流程 1. 选择安装语言 2. 选择是否在安装时更新 为了系统安装速度一般选择安装时不更新,安装后自行更新 3. 选择系统语言和键盘布局 4. 选择安装模式 5. 配置网络信息 6. 设置静态IP 7. 配置代理信息 8. 配置Ubuntu镜像…