首先说明:出现这个错的原因是由于jar包的编译版本和实际运行环境的版本不一致导致的
背景:
由于本地开发使用的是jdk 1.8; 客户环境是jdk 1.7;发到客户环境后一启动,报错:
Unsupported major.minor version 52.0 at java.lang.ClassLoader.defineClass1<Native method>……
解决方案:
1: dev 环境安装jdk 1.7, 重新编译,打包
这种方法当然可以解决问题,但是不是最好的办法,因为dev环境还有很多jdk 1.8 的项目。同时代码中有使用jdk 1.8的新特性,切换版本后还要重新修改代码,测试。。。
2: 打包安装文件给客户的时候把,jre环境也带上,通过写脚本来指定jre来启动jar,
这样就可以既不用修改客户的环境,也不用修改我们dev的宿主环境,把jre环境,jar包,脚本都copy到客户环境就OK了。
Step1: 安装jdk, 然后把安装目录下的jre目录copy 到安装文件中
image.png
Step2: 把项目打成jar 包,放在jre的同级目录下
Step3: 编写启动脚本,指定运行jar包的jre(这里以bat 脚本为例)
echo off
echo "the running env of abc.jar is jdk 1.8 "
echo "start script"
set "CURRENT_DIR=%cd%"
echo "CURRENT_DIR=%CURRENT_DIR%"
set "JRE_HOME=%CURRENT_DIR%"
if exist "%JRE_HOME%\jre18\bin\java.exe" goto okHome
:okHome
set "EXECUTABLE=%JRE_HOME%\jre18\bin\java.exe"
echo "EXECUTABLE=%EXECUTABLE%"
if exist "%EXECUTABLE%" goto okExec
:okExec
echo "start to exec jar"
%EXECUTABLE% -jar %CURRENT_DIR%\abc.jar
echo "start jar done"
pause
Step4: 打包发给客户,直接右键以管理员身份运行start.bat脚本就完美解决这个问题了