IntelliJ生成JAR文件后运行出现JNI error问题求助
解决LeanFT项目JAR执行时的JNI错误问题
这种JNI错误我碰到过好几次,尤其是在打包LeanFT项目的时候,核心原因大多和JRE/JDK版本不匹配或者JAR打包时缺失依赖有关,毕竟LeanFT本身依赖了不少原生库,咱们一步步来排查解决:
1. 先核对JRE与项目编译JDK的版本一致性
IDE里运行项目时用的是你配置的JDK,但双击JAR文件默认调用的是系统全局的JRE,如果两者版本不兼容(比如项目用JDK 8,系统JRE是11),就会触发JNI错误。
- 打开IntelliJ的
File -> Project Structure -> Project,查看你的Project SDK版本(比如JDK 1.8) - 打开命令行输入
java -version,确认系统默认JRE的版本是否和SDK一致 - 如果不一致,要么把系统默认JRE换成对应版本,要么执行JAR时指定JDK的java路径,比如:
C:\Program Files\Java\jdk1.8.0_301\bin\java -jar your-leanft-app.jar
2. 确保打包时包含LeanFT的所有依赖
LeanFT项目依赖大量专属库和原生文件(.dll/.so),IDE运行时会自动加载这些资源,但普通JAR包不会包含它们,导致执行时找不到依赖触发错误。推荐打包成Fat JAR(包含所有依赖的可执行JAR):
用IntelliJ自带Artifact打包的步骤:
- 打开
File -> Project Structure -> Artifacts,点击+ -> JAR -> From modules with dependencies - 选择你的项目主类(带有
main()方法的类) - 在
Output Layout面板中,确保所有LeanFT相关依赖(比如com.hp.lft.*开头的JAR)、项目依赖都被添加到JAR中 - 对于LeanFT的原生库,你可以把它们放在JAR同目录的
lib文件夹下,执行时通过参数指定路径:java -Djava.library.path=./lib -jar your-leanft-app.jar
3. 检查Manifest文件的主类配置
如果JAR的Manifest文件没正确指定主类,也会引发类似错误:
- 解压生成的JAR,打开
META-INF/MANIFEST.MF,确认存在一行:
这里的路径要和你的主类完全匹配(包名+类名),如果用IntelliJ打包,创建Artifact时一定要选对主类,不要留空。Main-Class: com.yourpackage.YourMainClass
4. 针对Hello World测试项目的验证
如果连简单的Hello World项目打包后都报错,大概率是打包方式不对:
- 确保你的Hello World类有
public static void main(String[] args)方法 - 用Fat JAR方式打包,不要用普通的JAR打包选项,因为即使是简单项目,LeanFT的基础依赖也必须被包含进去
内容的提问来源于stack exchange,提问作者plaidshirt
相关产品推荐
相关产品推荐

