SunOS 5.10中ksh脚本执行Java类报Cannot execute错误
SunOS 5.10下ksh执行Java报错排查方案
一、openjdk1.8.0_331/bin/java : Cannot execute 报错排查
这个报错和Java版本高低没有直接关系,按以下顺序逐一排查:
- 修正JAVA_HOME配置错误
标准JAVA_HOME环境变量必须指向JDK/JRE的根安装目录,不能指向bin子目录,同时必须使用绝对路径,禁止用相对路径——脚本执行时的工作目录和脚本存放目录不一定一致,相对路径会直接导致找不到二进制文件。
正确配置示例:# 替换为你服务器上JDK实际的绝对安装路径 export JAVA_HOME=/opt/packages/openjdk1.8.0_331 # 调用时拼接bin目录即可 $JAVA_HOME/bin/java com.myclass.MyClient - 验证文件存在性与可执行权限
配置完绝对路径后,先执行以下命令确认文件状态:# 查看java二进制文件是否存在、权限是否正常 ls -l $JAVA_HOME/bin/java # 如果没有可执行权限,执行以下命令添加 chmod +x $JAVA_HOME/bin/java - 验证二进制与系统架构、平台匹配
SunOS 5.10即Solaris 10,分SPARC、x86两种硬件架构,同时存在32/64位版本区别,如果安装的JDK架构和系统不匹配,或者误装了Linux平台的JDK包,都会触发无法执行的错误。
排查命令:
如果匹配失败,重新下载Solaris 10对应架构的JDK安装包即可,重复更换其他不匹配的版本无法解决问题。# 查看当前系统架构 isainfo -kv # 查看java二进制的平台、架构信息,输出必须匹配当前系统,不能出现Linux、wrong architecture字样 file $JAVA_HOME/bin/java - 检查依赖库完整性
如果java二进制依赖的系统基础库缺失,也会触发执行失败,用以下命令检查依赖:
如果输出中存在标记为ldd $JAVA_HOME/bin/javanot found的依赖库,安装对应Solaris系统补丁或兼容包即可。
排查完成后先单独执行
$JAVA_HOME/bin/java -version,能正常输出版本信息,说明Java环境本身配置正常,再执行业务类即可。
二、高版本JDK运行低版本编译类的兼容问题
Java原生向下兼容,高版本JRE/JDK可以直接运行低版本JDK编译的class文件,不会触发执行错误;只有低版本JRE运行高版本编译的class时,才会抛出java.lang.UnsupportedClassVersionError异常。
如果碰到版本兼容相关报错,启动时添加对应参数指定兼容版本即可:
$JAVA_HOME/bin/java -source 8 -target 8 com.myclass.MyClient
内容的提问来源于stack exchange,提问作者Prasad
相关产品推荐
相关产品推荐

