如何在未安装JDK、仅装JRE 1.8的电脑上运行Jar文件?
解决JRE 1.8环境下运行高版本编译Jar的问题
错误原因
你遇到的UnsupportedClassVersionError是核心矛盾:你的Jar是用JDK18编译的(对应class文件版本62.0),而目标电脑的JRE1.8仅能识别最高52.0版本的class文件,自然无法正常加载运行。
不用安装JDK的解决方法
方法1:重新编译Jar,适配JRE1.8
在你自己的JDK18环境下编译时,指定编译目标为JRE1.8,生成的Jar就能兼容低版本环境:
- 原生javac命令编译:
(javac -source 1.8 -target 1.8 -bootclasspath "path\to\jre1.8\lib\rt.jar" MainWindow.java-bootclasspath参数可选,但能确保编译出的类完全适配JRE1.8,避免调用高版本API) - Maven项目修改
pom.xml编译配置:<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> <bootclasspath>${java.home}/lib/rt.jar</bootclasspath> </configuration> </plugin> </plugins> </build> - Gradle项目修改
build.gradle:
重新打包Jar后,就能在目标电脑的JRE1.8上正常运行。java { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 }
方法2:给目标电脑安装对应版本的JRE(无需JDK)
JRE是运行Java程序的最小环境,无需安装完整JDK:
- 下载JDK18对应的JRE包(或OpenJDK18的JRE版本)
- 安装或解压到目标电脑的任意路径,比如
C:\jre18 - 用该JRE的java命令运行Jar:
也可以把这个JRE的bin目录加到系统环境变量PATH的最前端,之后双击Jar就能直接调用该JRE运行。C:\jre18\bin\java -jar <filename.jar>
方法3:打包自定义运行时镜像(用户无需单独装JRE)
用JDK18的jlink工具,把应用和所需JRE模块打包成独立运行镜像,用户解压后直接启动:
- 先用
jdeps分析应用依赖的模块:jdeps --print-module-deps <filename.jar> - 用jlink创建运行时镜像:
jlink --module-path "path\to\jdk18\jmods" --add-modules [刚才得到的模块列表] --output myapp-runtime - 将Jar放到
myapp-runtime\app目录,创建启动脚本(比如Windows下的start.bat):
用户拿到打包后的文件夹,双击启动脚本就能运行,无需额外安装JRE/JDK。@echo off myapp-runtime\bin\java -jar app\<filename.jar>
内容的提问来源于stack exchange,提问作者Janekbrze
相关产品推荐
相关产品推荐

