springboot项目Maven打包遇到的问题总结
java -jar 执行报错中没有主清单属性
Spring Boot的可执行JAR需要依赖该插件生成正确的主清单属性。在 pom.xml 的 部分添加以下配置:
<build><plugins><!-- 必须配置此插件才能生成可执行的Spring Boot JAR --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version> <!-- 版本与Spring Boot一致 --><executions><execution><goals><goal>repackage</goal> <!-- 关键:重新打包为可执行JAR --></goals></execution></executions></plugin></plugins>
</build>
我本地resource的lib包下引入了数据库的xxx的驱动包,idea运行正常,为什么打的包运行报错java.sql.SQLException: com.xxx.Driver
在 Spring Boot 项目中,如果本地手动引入第三方驱动包(如神通数据库的 oscar 驱动),但在 IDEA 中运行正常、打包后运行报 java.sql.SQLException: com.oscar.Driver 错误,通常是因为 驱动类未正确加载到打包后的 JAR 中。以下是完整的排查和解决方案:
1. 确认驱动包是否被打包到 JAR 中
步骤 1:解压生成的 JAR 文件
通过以下命令解压 JAR 文件(将 your-app.jar 替换为实际名称):
jar -xvf your-app.jar
进入解压后的目录,检查 BOOT-INF/lib/ 下是否有 oscar 驱动的 JAR 文件(如 oscar-jdbc-x.x.x.jar)。
结果分析:
- 如果不存在:驱动包未被正确打包,需修改 Maven 配置。
- 如果存在:驱动类名或注册方式有误,需检查代码配置。
2. 解决方案:确保驱动包被打包
方法一:通过 Maven 本地依赖引入(推荐)
将本地的 oscar 驱动 JAR 安装到 Maven 本地仓库,并在 pom.xml 中声明依赖。
-
安装驱动到本地仓库
执行以下命令(替换实际路径和版本):mvn install:install-file \-Dfile=src/main/resources/lib/oscar-jdbc-x.x.x.jar \-DgroupId=com.oscar \-DartifactId=oscar-jdbc \-Dversion=x.x.x \-Dpackaging=jar -
在
pom.xml中添加依赖<dependency><groupId>com.oscar</groupId><artifactId>oscar-jdbc</artifactId><version>x.x.x</version> </dependency>
方法二:通过 system 作用域直接引入本地 JAR
在 pom.xml 中直接引用本地 JAR(需确保路径正确):
<dependency><groupId>com.oscar</groupId><artifactId>oscar-jdbc</artifactId><version>x.x.x</version><scope>system</scope><systemPath>${project.basedir}/src/main/resources/lib/oscar-jdbc-x.x.x.jar</systemPath>
</dependency>
方法三:配置资源插件强制打包 lib 目录
如果驱动包位于 src/main/resources/lib/,需确保 Maven 资源插件将其复制到 target/classes/lib/,并配置 spring-boot-maven-plugin 包含这些 JAR。
-
在
pom.xml中添加资源插件配置<build><plugins><!-- 资源插件:复制 resources/lib 到 target/classes/lib --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><executions><execution><id>copy-lib</id><phase>validate</phase><goals><goal>copy-resources</goal></goals><configuration><outputDirectory>${project.build.directory}/classes/lib</outputDirectory><resources><resource><directory>src/main/resources/lib</directory><filtering>false</filtering></resource></resources></configuration></execution></executions></plugin><!-- Spring Boot 打包插件 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><!-- 确保包含 lib 目录中的 JAR --><includeSystemScope>true</includeSystemScope></configuration></plugin></plugins> </build> -
重新打包并验证
mvn clean package
3. 检查驱动类名和注册方式
如果驱动包已正确打包,但依然报错,需确认以下两点:
3.1 驱动类名是否正确
在代码或配置中检查驱动类名是否为 com.oscar.Driver,确保与实际的驱动类名一致(某些驱动可能类名不同)。
3.2 是否显式注册驱动(可选)
在 Spring Boot 的 application.properties 或 application.yml 中配置驱动类:
# 替换为实际的驱动类名
spring.datasource.driver-class-name=com.oscar.Driver
spring.datasource.url=jdbc:oscar://host:port/database
spring.datasource.username=your-username
spring.datasource.password=your-password
4. 完整示例 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.0</version></parent><groupId>com.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><dependencies><!-- Spring Boot Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 神通数据库驱动(方法一或二) --><dependency><groupId>com.oscar</groupId><artifactId>oscar-jdbc</artifactId><version>x.x.x</version></dependency></dependencies><build><plugins><!-- 资源插件:打包本地 JAR --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><executions><execution><id>copy-lib</id><phase>validate</phase><goals><goal>copy-resources</goal></goals><configuration><outputDirectory>${project.build.directory}/classes/lib</outputDirectory><resources><resource><directory>src/main/resources/lib</directory><filtering>false</filtering></resource></resources></configuration></execution></executions></plugin><!-- Spring Boot 打包插件 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
5. 验证步骤
- 重新打包:
mvn clean package。 - 解压 JAR,检查
BOOT-INF/lib/下是否有驱动 JAR。 - 运行 JAR:
java -jar your-app.jar。
常见问题总结
| 问题原因 | 解决方案 |
|---|---|
| 驱动包未被打包 | 通过 Maven 本地依赖或资源插件配置强制包含 JAR |
| 驱动类名错误 | 检查并修正 spring.datasource.driver-class-name |
| 驱动未显式注册 | 在配置文件中指定驱动类 |
如果问题仍未解决,可以检查驱动包是否与当前 Java 版本和 Spring Boot 版本兼容。
相关文章:
springboot项目Maven打包遇到的问题总结
java -jar 执行报错中没有主清单属性 Spring Boot的可执行JAR需要依赖该插件生成正确的主清单属性。在 pom.xml 的 部分添加以下配置: <build><plugins><!-- 必须配置此插件才能生成可执行的Spring Boot JAR --><plugin><groupId>o…...
DeepSeek FlashMLA:用技术创新破解大模型落地难题
注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】 文章目录 DeepSeek大模型技术系列十四DeepSeek大模型技术系列十四》DeepS…...
[补充]原码、反、补、移码的转换
近期在学习Java的类型转换的知识,强制类型转换的时候会遇到数据(丢失)溢出的问题。 最后在IDEA控制台输出的时候,出现了负数。了解了一下强制类型转换在计算机中的原理,随后就复习了一下原码、反、补、移码的转换的知…...
Hue 编译异常:ImportError: cannot import name ‘six‘ from ‘urllib3.packages‘
个人博客地址:Hue 编译异常:ImportError: cannot import name six from urllib3.packages | 一张假钞的真实世界 在编译Hue的时候出现错误信息如下: Running /home/zhangjc/ysten/git/ysten-hue/build/env/bin/hue makemigrations --noinpu…...
【Maven】将普通Eclipse项目改造为Maven项目(非SpringBoot项目)
文章目录 将普通Eclipse项目改造为Maven项目(非SpringBoot项目)Maven安装与配置项目结构改造父子Pom.xml文件配置(继承与集成)父项目下的pom.xml文件配置普通子模块下的pom.xml配置启动模块的pom.xml配置 多模块编译总结 Maven插件…...
安装Node.js
1.打开官网,下载安装包 2.安装过程中,全部默认,next. 3.在安装根目录下,新建两个文件夹【node_cache】和【node_global】 4.检测是否安装成功 打开控制台,node -v, npm -v, 显示版本号。 5.配置环境变量 1>从no…...
物联网同RFID功能形态 使用场景的替代品
在物联网(IoT)和自动识别技术领域,除了RFID标签外,还有一些其他技术产品可以在形态和大小上与RFID标签相似,同时提供类似或更强大的功能。以下是几种能够替代RFID标签的产品: 一、NFC标签 NFC(…...
【力扣】堆相关总结
priority_queue std::priority_queue 是 C 标准库中的一个容器适配器,提供了堆(Heap)数据结构的功能。它通常用于实现优先队列,允许你高效地插入元素和访问最大或最小元素。 头文件 #include <queue> 基本定义 std::pri…...
【前端基础】3、HTML的常用元素(h、p、img、a、iframe、div、span)、不常用元素(strong、i、code、br)
HTML结构 一个HTML包含以下部分: 文档类型声明html元素 head元素body元素 例(CSDN): 一、文档类型声明 HTML最一方的文档称为:文档类型声明,用于声明文档类型。即:<!DOCTYPE html>…...
【漫话机器学习系列】113.逻辑回归(Logistic Regression) VS 线性回归(Linear Regression)
逻辑回归 vs 线性回归:详解对比 在机器学习和统计学中,逻辑回归(Logistic Regression) 和 线性回归(Linear Regression) 都是非常常见的模型。尽管它们的数学表达式有一定的相似性,但它们的应用…...
3 算法1-3 回文质数
题目描述 因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。 写一个程序来找出范围 [a,b](5≤a<b≤100,000,000)(一亿)间的所有回文质数。 输入格式 第一行输入两个正…...
Redis---缓存穿透,雪崩,击穿
文章目录 缓存穿透什么是缓存穿透?缓存穿透情况的处理流程是怎样的?缓存穿透的解决办法缓存无效 key布隆过滤器 缓存雪崩什么是缓存雪崩?缓存雪崩的解决办法 缓存击穿什么是缓存击穿?缓存击穿的解决办法 区别对比 在如今的开发中&…...
联合省选 2025 游记
Day 1 不会 LCT,不会字符串,不会博弈 快进到考场 t 1 t1 t1 很快想到枚举中位数再 check,然后就会了,思路很清晰写的很快 t 2 t2 t2 干想 1h 编出来 n m 2 3 nm^{\frac{2}{3}} nm32,然后认为 t 3 t3 t3 会和去年…...
Skywalking介绍,Skywalking 9.4 安装,SpringBoot集成Skywalking
一.Skywalking介绍 Apache SkyWalking是一个开源的分布式追踪与性能监视平台,特别适用于微服务架构、云原生环境以及基于容器(如Docker、Kubernetes)的应用部署。该项目由吴晟发起,并已加入Apache软件基金会的孵化器,…...
Thonny+MicroPython+ESP32开发环境搭建
1、下载&安装Thonny 安装成功后,会在桌面生成快捷键 双击快捷键,打开程序,界面如下 2、下载MicroPython 下载地址:MicroPython - Python for microcontrollers v1.19版(推荐,此版本稳定): https://do…...
数据结构:反射 和 枚举
目录 一、反射 1、定义 2、反射相关的类 3、Class类 (2)常用获得类中属性相关的方法: (3)获得类中注解相关的方法: (4)获得类中构造器相关的方法: (…...
前缀和算法 算法4
算法题中帮助复习的知识 vector<int > dp( n ,k); n为数组大小 ,k为初始化 哈希表unordered_map<int ,int > hash; hash.find(k)返回值是迭代器 ,找到k返回其迭代器 没找到返回hash.end() hash.count(k)返回值是数字 ,找到k返回1 ,没找到返回0. C和java中 负数…...
USRP7440-通用软件无线电平台
1、产品描述 USRP7440基于第三代XILINX Zynq UltraScale RFSoC架构,它将射频ADC、DAC、ARM、FPGA等集成一体,瞬时带宽可以达到2.5GHz,尤其适合于射频直采应用,比如通信与雷达。 第一代RFSOC高达4GHz • 8x 或 16x 6.554GSPS DAC…...
yunedit-post ,api测试比postman更好
postman应该是大家最熟悉的api测试软件了,但是由于它是外国软件,使用它的高端功能注册和缴费都比较麻烦。生成在线文档分享也经常无法访问被拦截掉。 这里可以推荐一下yunedit-post,该有的功能都有。 https://www.yunedit.com/postdetail …...
windows下玩转vllm:在wsl下安装vllm后续,设置modelscope作为下载源
文章目录 前言所涉及的之前的关键步骤解决模型权重下载网络不通畅的问题vllm和modelscope整合后的bug附录 ImportError: cannot import name _try_login from modelscope.utils.hf_util 全部报错信息前言 之前,咱们说了,由于windows不支持直接部署vllm,所以要么采用wsl,要…...
移动零
一 :题目 二:思路 双指针法: 两个指针将数组划分成三个部分: 解释: ①:所以一开始dest要等于-1,因为没有非零的元素,cur0,因为要从头开始遍历数组 ②:cur为…...
MySQL整体架构
目录 1 客户端 2 服务端 2.1 Server层 2.1.1 连接器 2.1.2 查询缓存 2.1.3 词法器 2.1.4 优化器 2.1.5 执行器 2.2 存储引擎层 1 客户端 ● 客户端为连接MySQL服务端的工具或者驱动,比如JDCB,ODBC等等 ● 用于连接目前服务器,并且发送需要执行…...
Linux之yum详解
—— 小 峰 编 程 目录 1、Linux软件的安装方式 2、什么是yum 3、配置网络yum源 4、yum命令 【语法】 【yum常用命令】 1、Linux软件的安装方式 在CentOS系统中,软件管理方式通常有三种方式: rpm安装 、 yum安装 以及 编译安装 。 2、什么是yum…...
大数据学习(52)-MySQL数据库基本操作
&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦ᾑ…...
鸿蒙启动页开发
鸿蒙启动页开发 1.1 更改应用名称和图标 1.更改应用图标 找到moudle.json5文件,找到应用启动的EntryAbility下面的icon,将原来的图标改成自己设置的即可 2.更改应用名称 3.效果展示 2.1 广告页面开发 3.1 详细介绍 3.1.1 启动页面 import { PrivacyDialog } fr…...
记忆化搜索(典型算法思想)—— OJ例题算法解析思路
目录 一、509. 斐波那契数 - 力扣(LeetCode) 算法代码: 1. 动态规划 (fib 函数) 初始化: 递推计算: 返回结果: 2. 记忆化搜索 (dfs 函数) 备忘录初始化: 递归终止条件: 递…...
Day11,Hot100(贪心算法)
贪心 (1)121. 买卖股票的最佳时机 第 i 天卖出的最大利润,即在前面最低价的时候买入 class Solution:def maxProfit(self, prices: List[int]) -> int:min_price prices[0]ans 0for price in prices:ans max(ans, price - min_price…...
翻译: 深入分析LLMs like ChatGPT 一
大家好,我想做这个视频已经有一段时间了。这是一个全面但面向普通观众的介绍,介绍像ChatGPT这样的大型语言模型。我希望通过这个视频让大家对这种工具的工作原理有一些概念性的理解。 首先,我们来谈谈你在这个文本框里输入内容并点击回车后背…...
《白帽子讲 Web 安全》之移动 Web 安全
目录 摘要 一、WebView 简介 二、WebView 对外暴露 WebView 对外暴露的接口风险 三、通用型 XSS - Universal XSS 介绍 四、WebView 跨域访问 五、与本地代码交互 js 5.1接口暴露风险: 5.2漏洞利用: 5.3JavaScript 与 Native 代码通信 六、Chr…...
解锁 indexOf、substring 和 JSON.stringify:从小程序图片上传看字符串魔法 ✨
🌟 解锁 indexOf、substring 和 JSON.stringify:从小程序图片上传看字符串魔法 ✨ 在 JavaScript 中,字符串操作和数据序列化是开发中不可或缺的技能。indexOf、substring 和 JSON.stringify 是三个简单却强大的工具,分别用于定位…...
