【错误记录】exe4j 打包程序无法设置 jar 包依赖的问题 ( 将源码 和 依赖库打包到同一个 jar 包中 )

文章目录

一、问题描述


【错误记录】IntelliJ IDEA 导出可执行 jar 包执行报错 ( java.lang.ClassNotFoundException | 打包时没有选择依赖库 ) 博客中遇到

kotlin 复制代码
java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)

报错信息 , 这里就在打包时 , 采取了如下策略 ;

由于编译 IntelliJ IDEA 程序时 , 选择了 第二种 Jar 包打包方式 , 导致 主程序 与 依赖库是分开打包的 ;

最终的主程序 与 依赖库 都是分开的 , 使用 主程序 时 , 必须额外配置依赖库 ;

这里有涉及到另外一个问题 , 想要使用 exe4j 将上述 jar 包打包成一个 Windows 程序 ,

将 Jar 包 与 Java 虚拟机打包在一起 , 捆绑成一个可执行的 exe 程序 ;

但是 exe4j 打包时 , 无法设置 jar 包的依赖库 , 只能设置一个 jar 包 ;

研究了下 exe4j 的文档 , 得到以下结论 :

  • exe4j 打包程序无法设置 jar 包依赖 , 只能设置一个 jni 相关的 native 的 .a 静态库 和 .so 动态库 依赖目录 ;
  • exe4j 也不能设置 java 命令执行参数 , 如果可以设置参数 , 可以通过 -classpath 选项设置 依赖库 ;
  • 还有一种方式可以通过命令行传入参数 , 但是打包的程序是一个途径界面程序 ;

这就比较尴尬了 , IntelliJ IDEA 打包出来的是一个 jar 包 + 若干 jar 依赖库 , 无法设置到 exe4j 中 ;

在 exe4j 执行时 , 会报错 , 无法找到依赖 , 自然也不能找到相关的类 ;

kotlin 复制代码
java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)

二、解决方案


在 IntelliJ IDEA 中 , 导出 jar 包时 , 选择第一种方案设置 , 然后将所有的 java 源码打包在一起 ;

打包后的效果如下 , 所有的 Java 源码都打包在了一个 jar 包中 ;

注意 , 要删除 META-INF 目录下的签名文件 ;

【错误记录】IntelliJ IDEA 打包包含依赖库的 Jar 包执行报错 ( Invalid signature file digest for Manifest main attribute ) 博客中 , 遇到了签名文件出错的问题 ;

相关推荐
想做小南娘,发现自己是女生喵32 分钟前
第 2 章 顺序表和 vector
java·数据结构·算法
CHANG_THE_WORLD1 小时前
6.多线程的TCP通信
java·网络·tcp/ip
sun03222 小时前
【笔记】Spring MVC 相关介绍
java·spring·mvc
兰令水2 小时前
hot100【acm版】【2026.7.18打卡-java版本】
java·开发语言·算法
CoderYanger3 小时前
A.每日一题:3020. 子集中元素的最大数量
java·程序人生·算法·leetcode·面试·职场和发展·学习方法
wear工程师3 小时前
CompletableFuture 的 allOf 到底怎么收结果?面试别只说并行
java·后端
倒流时光三十年4 小时前
Logback 系列(3):三大核心组件 Logger / Appender / Encoder
java·开发语言·logback
什巳4 小时前
JAVA练习312- 二叉搜索树中第 K 小的元素
java·数据结构·算法·leetcode
倒流时光三十年4 小时前
Logback 系列(7):常用 Appender(控制台 / 文件 / 滚动文件)
java·前端·logback
极客先躯5 小时前
高级java每日一道面试题-2026年04月18日-实战篇[Docker]-如何处理金融行业的时序数据容器化?
java·运维·docker·容器·金融·时序数据·高级面试