Jpackage报错LinkageError:UnsupportedClassVersionError问题求助
问题解决指南
核心错误:UnsupportedClassVersionError 原因及修复
报错明确显示主类是用JDK14(class文件版本58.0)编译的,但运行时调用了JDK11环境(仅支持到55.0),问题出在jpackage打包时未绑定JDK14的运行时,导致生成的镜像启动时默认调用了系统残留的JRE11。
修复步骤:
- 用JDK14的
jlink生成自定义运行时镜像(JDK9+不再单独提供独立JRE):
不确定依赖模块的话,可通过jlink --add-modules java.base,java.desktop,java.logging,...(列出项目依赖的所有模块) --output jre14-customjdeps分析你的jar包:jdeps --list-deps your-application.jar - 打包时显式指定这个自定义运行时:
这样生成的app镜像会内置JDK14运行时,完全不依赖系统环境。jpackage --input ./your-jar-dir --main-jar your-application.jar --main-class Chimera.tech.Main --runtime-image ./jre14-custom --win-console
"incubator modules"警告说明
jpackage在JDK14中属于孵化器模块(jdk.incubator.jpackage),是Java官方标记为「仍在试验、未正式标准化」的功能,因此打包时会弹出警告。该警告不影响功能使用,JDK16及以后版本中jpackage已成为标准模块,警告会自动消失。
关于生成的app镜像是否独立
如果打包时通过--runtime-image指定了自定义运行时,生成的app镜像是完全独立的,无需目标系统安装任何JDK/JRE;若未指定,jpackage会尝试调用系统中的JRE,这就是你遇到版本不匹配的直接原因。
内容的提问来源于stack exchange,提问作者EveningSt3r
相关产品推荐
相关产品推荐

