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

news2024/12/23 14:13:20

文章目录

  • 一、问题描述
  • 二、解决方案





一、问题描述



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

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 执行时 , 会报错 , 无法找到依赖 , 自然也不能找到相关的类 ;

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 ) 博客中 , 遇到了签名文件出错的问题 ;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/954745.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[LeetCode周赛复盘] 第 360 场周赛20230827

[LeetCode周赛复盘] 第 360 场周赛20230827 一、本周周赛总结2833. 距离原点最远的点1. 题目描述2. 思路分析3. 代码实现 2834. 找出美丽数组的最小和2. 思路分析3. 代码实现 2835. 使子序列的和等于目标的最少操作次数1. 题目描述2. 思路分析3. 代码实现 2836. 在传球游戏中最…

Leetcode328 奇偶链表

思路:分别处理奇偶,保存奇偶的第一个和最后一个节点,注意最后链接的时候需要把偶数的next去掉再拼接不然就成环了 class Solution:def oddEvenList(self, head: ListNode) -> ListNode:if not head or not head.next or not head.next.ne…

数据结构与算法-递归回溯分治

引入思考: 1.微信分销系统中有一个返利,大家应该都知道,比如B是A的下线,C是B的下线,那么在分钱返利的时候A可以分B,C的钱,这时候我们是不是就要分别找B,C的最后上级。这个问题我们一般怎么来解决…

数据通信——传输层TCP(可靠传输机制的滑动窗口)

引言 之前提到过拥塞问题,如果大量数据疯狂涌入,接收端无法及时处理就会导致数据丢包,从而使得通信受到干扰。之前的连续ARQ如果不加以节制,疯狂发送报文,接收端无法及时返回ACK就会导致网络瘫痪。 滑动窗口机制协议 这…

Linux服务器部署JavaWeb后端项目

适用于:MVVM前后台分离开发、部署、域名配置 前端:Vue 后端:Spring Boot 这篇文章只讲后端部署,前端部署戳这里 目录 Step1:服务器上搭建后端所需环境1、更新服务器软件包2、安装JDK83、安装MySQL4、登录MySQL5、修…

一百六十六、MySQL——systemctl stop mysqld无法停止MySQL8.0服务

一、目的 为了解决MySQL的中文乱码问题,需要对/etc/my.cnf文件进行参数配置。 而对/etc/my.cnf文件进行配置参数之前,需要先停止MySQL服务 二、错误命令语句示范 (一)错误的命令语句 # systemctl stop mysqld (…

SQL分组后取topN

准备数据 create table SC( SId varchar(10) comment "学生ID", CId varchar(10) comment "课程ID", score decimal(18,1) comment "课程成绩");insert into SC values(01 , 01 , 80); insert into SC values(01 , 02 , 90); insert into SC va…

用最少数量的箭引爆气球【贪心算法】

用最少数量的箭引爆气球 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可以沿着 x 轴从不同点 完全垂直 地…

Debian12 Gnome环境下的办公软件安装

一、禁用Wayland,启用xorg 当前Debian12 默认采用Wayland来支持gnome环境,但是许多软件无法在该系统下显示,例如:openoffice,yozo-office,weixin,fcitx。所以要在gdm3的配置文件中,…

港交所MMDH行情协议

目录 一、交易时间 二、MMDH与OMD的差异 三、MMDH消息类型 四、MMDH的市场快照数据 内地市场数据枢纽-证券市场(OMD-MMDH) 港交所OMD-C对接笔记 - skylerjiang - 博客园 (cnblogs.com) 一、交易时间 图 1 港交所交易时间段 图 2 消息序列 二、MMDH与OMD的差异 图 3 标准…

Leetcode213 打劫家舍2

思路&#xff1a;既然头尾不能同时取&#xff0c;那就分别算只取头或者只取尾&#xff0c;不考虑特殊情况的话是一个简单的动态规划 class Solution:def rob(self, nums: list[int]) -> int:if len(nums) < 3:return max(nums)max_sum [nums[0], max(nums[1], nums[0])…

IC芯片老化测试以及方案详解

芯片老化试验是一种对芯片进行长时间运行和负载测试的方法&#xff0c;以模拟芯片在实际使用中的老化情况。 1. 目的&#xff1a;芯片老化试验的目的是评估芯片在长时间使用和负载情况下的可靠性和性能稳定性&#xff0c;以确定其寿命和可靠性指标。 2. 测试方案设计&#xff1…

软件测试/测试开发丨Python 内置库 正则表达式

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27058 python 内置库 正则表达式 目录 正则表达式使用re模块实现正则表达式操作 正则表达式 正则表达式就是记录文本规则的代码可以查找操作符合某些复…

大屏开发,浏览器的可视区域和设备的分辨率

在线屏幕检测 - 显示器检测 - 显示器坏点检测工具

趣解装饰者模式之《我想吃煎饼果子了》

〇、小故事 话说最近早起没时间做早饭&#xff0c;并且早上上班的地铁口不远处就有一处非常火爆的煎饼摊&#xff0c;所以我就经常去那边吃煎饼&#xff0c;一个“基础版”煎饼是7块钱&#xff0c;向煎饼中加一颗鸡蛋是1元钱&#xff0c;加一根火腿肠是3元钱&#xff0c;加鸡柳…

【算法日志】动态规划刷题:不相邻选择类问题(day40)

算法随想录刷题60Day 目录 前言 打家劫舍1 (数组) 打家劫舍2&#xff08;环形数组&#xff09; 打家劫舍3&#xff08;二叉树&#xff09; 前言 今天主要讨论不相邻选择类问题&#xff0c;会在不同数据结构题型的下探讨该类问题的解法。 打家劫舍1 (数组) 本题只需要讨论当…

微信开发之朋友圈自动评论的技术实现

简要描述&#xff1a; 朋友圈评论 请求URL&#xff1a; http://域名地址/snsComment 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型说明wI…

炒股10倍杠杆软件是什么?出现账户安全问题怎么办?有三个方法解决

炒股10倍杠杆软件是指一种用于股票交易的杠杆交易软件&#xff0c;可以将投资者的交易资金进行多倍放大&#xff0c;以获得更高的投资回报。然而&#xff0c;使用杠杆交易软件也伴随着一些账户安全问题&#xff0c;因此&#xff0c;本文将介绍三个方法来解决这些问题。 一、加…

C语言面试题-指针

#include <stdio.h> int main() {char str1[] "hello bit.";//地址不同char str2[] "hello bit.";const char* str3 "hello bit.";//常量是不可以被修改的const char* str4 "hello bit.";//常量是不可以被修改的if (str1 s…

臻图信息以数字孪生技术推动智慧小区数字化建设

伴随着智慧城市建设进程的加速发展&#xff0c;加速传统小区的管理与服务向智能化升级转型。运用智慧化的管理和服务&#xff0c;利用信息技术和物联网等技术手段&#xff0c;将传统的居住区域与智能设备相结合&#xff0c;实现楼宇、社区设施、服务管理的数字化、网络化、智能…