Error: A JNI error has occurred的另一种可能

遇到一个Error: A JNI error has occurred,对我来说还算是比较棘手的问题。网上查到的解决方法千篇一律,如果不是有同事指点我可能卡死在这里,希望这篇经验对各位有用。

Error: A JNI error has occurred

看到这个报错,我的DNA都动了。

尤记得,当时初学JAVA我就好高骛远,在老师讲理论的时候自己在课堂上偷偷配置环境想跑一下代码,然后理所当然的踩了这个坑。从第二张图片来看,很容易就能看出这是一个版本冲突问题。

一般处理方法

出现这个一般是因为Java和JDK的版本不一样,也就是在终端中输入java -version和javac -version时,出现的版本号不同。

解决问题也是非常简单,保证版本同步即可。

解决方案参考JNI error windows解决方案

但是他在我的开发电脑上报这个报错让我隐隐觉得不太对劲。毕竟我的电脑环境已经顺利的工作了两个月,而且这个项目是公司线上的老项目了,我非常确认公司都是java8,按照常理来说不可能出现配置的问题。

所以在简单的验证我的环境之后,我就怀疑是IDEA的jdk配置问题。

排查IDEA配置流程

打开file里面的Project Structure选项

依次排查以下位置的配置
可以看到,每个配置都没问题,不可能存在java版本不兼容的问题。但是除了这个问题还可能是什么原因,这个时候我有点抓瞎。

最后的解决方法

经过高人指点迷津,在运行环境配置中点击 Include dependencies with "provided" scope后问题迎刃而解。具体配置方法如图:

Include dependencies with "provided" scope这个选项的作用是,在Java开发中,尤其是在使用Maven这样的构建工具时。"provided"是一个依赖范围,意味着这个依赖在运行时环境中已经提供,因此只对编译和测试的classpath有效,对运行的classpath无效。

典型的例子就是servlet-api, 编译和测试该项目的时候需要该依赖,但是在运行时,web容器已经提供的该依赖,所以运行时就不再需要此依赖,如果不显示指定该依赖范围,并且容器依赖的版本和maven依赖的版本不一致的话,可能会引起版本冲突。

这个配置为什么能够处理Error: A JNI error has occurred,我不敢妄下定论,但是我觉得原因是这样的。

错误"Error: A JNI error has occurred"是一个范围非常大的错误,可能有很多原因:

  1. 确保Java版本和依赖库的版本兼容。JNI错误可能由于Java版本和库版本不匹配导致。
  2. 项目是有多个版本的相同库存在,这可能会导致冲突,报JNI错误。

所以Include dependencies with "provided" scope这个配置项成功地避免了在运行时的版本冲突问题。

相关推荐
纳兰青华5 分钟前
拼图大师:从“暴力尝试“到“动态规划“的拆字艺术
java·算法·动态规划
蓝斯4979 小时前
[原创]《C#高级GDI+实战:从零开发一个流程图》第章:增加贝塞尔曲线,上、下、左、右连接点
java·c#·流程图
前端工作日常9 小时前
我学习到的Java 的 Service 分层:itf 和 impl 到底是什么?
java·后端
都叫我大帅哥10 小时前
Spring @Transactional 注解完全指南
java·spring
Java成神之路-10 小时前
G1 垃圾回收器 :SATB + TAMS核心机制深度解析
java·jvm
前端工作日常10 小时前
我学习到的JIT即时编译与机器码缓存失效
java·后端
带刺的坐椅10 小时前
Solon 的 10 种 HTTP 服务器:改一行依赖,换一个引擎
java·solon·jetty·undertow·mcp-server·htttp
xcLeigh11 小时前
Go入门:变量声明的五种方式详解
java·开发语言·golang
AI大模型-小华12 小时前
Codex 三方充值快速入门指南
java·前端·数据库·chatgpt·ai编程·codex·chatgpt pro
Mark_ZP12 小时前
【锁1】Synchronized vs ReentrantLock区别
java