Error: A JNI error has occurred, please check your installation and try again

43 篇文章 0 订阅
27 篇文章 4 订阅

天行健,君子以自强不息;地势坤,君子以厚德载物。


每个人都有惰性,但不断学习是好好生活的根本,共勉!


文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。

1. 场景

k8s部署Java项目,pod启动失败

2. 报错

logs命令查看日志报错如下

[root@k8s-master ~]# kubectl logs sb-dplm-d765487f8-s5qfp -n ns-sb
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/springframework/boot/loader/JarLauncher has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)
[root@k8s-master ~]# 

截图
在这里插入图片描述

3. 分析

报错内容表示jni(java native interface)错误,检查是否安装然后重试
个人猜测就是java环境问题,无法获取或者使用这个接口去执行java程序
然后网上搜到的说的最多的就是java编译和运行的jdk版本不一致,而且他们都是在Windows上遇到的这个问题
对我这个情况来说,没办法解决

3.1 打包阶段输出

我尝试在.gitlab-ci.yml文件的两个阶段(打包,构建镜像)中执行查看java版本的命令
即在脚本命令中添加java -version和javac -version
在打包的阶段窗口看到如下,java版本为21.0.2
在这里插入图片描述
这里打包使用的java版本之所以是21.0.2是因为我在打包阶段未指定镜像,它默认会使用gitlab-runner注册时定义的镜像中的jdk

3.2 gitlab-runner配置文件

我去gitlab-runner的配置文件中查看配置文件的配置参数如下,可以看到这里使用的是maven镜像的最新版本,里面应该默认包含jdk最新版本,所以才会输出21.0.2这个版本
在这里插入图片描述

3.3 dockerfile配置

而在构建镜像时我构建镜像使用的dockerfile文件中的java镜像版本为jdk8的环境
在这里插入图片描述
综上,打包和构建镜像时的jdk版本不同,导致jar包执行出错

4. 解决

在打包阶段指定maven版本,使用adoptopenjdk/maven-openjdk8,此版本maven包含jdk8
在这里插入图片描述
配置后,重新执行
查看如下,jdk版本为1.8.0_222,与dockerfile中的jdk大版本
在这里插入图片描述

构建后重新部署pod即可

感谢阅读,祝君暴富!


  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒山李白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值