Spring应用IDE运行正常 Ubuntu部署时无法加载org.mariadb.jdbc.Driver求助
问题根因
核心错误为Spring Boot自动配置数据源时,无法找到指定的MariaDB JDBC驱动类,本地IDE运行正常但Ubuntu服务器部署失败,均为打包/部署环节的依赖加载差异导致。
差异原因排查点
- 打包方式问题:IDE运行时会直接加载本地Maven仓库中的依赖,若部署时打的是普通jar包而非Spring Boot可执行jar(未使用
spring-boot-maven-plugin打包),依赖包不会被打进jar内部,Ubuntu环境若无全局加载该MariaDB驱动就会找不到类 - 依赖scope配置错误:检查pom中
mariadb-java-client的<scope>标签是否被误设为provided、test,这两个scope的依赖不会被打进可执行jar的BOOT-INF/lib目录,IDE运行时会加载但部署后缺失 - 部署包损坏:传输到Ubuntu的jar包损坏,内部
BOOT-INF/lib下缺少mariadb-java-client-2.7.4.jar文件 - 配置文件不一致:检查Ubuntu上使用的
application.yml/properties配置,是否显式指定了spring.datasource.driver-class-name,值是否拼写错误,同时确认部署时使用的配置文件与本地IDE的配置无差异
可行解决方案
- 修正打包配置:确保pom中已经引入
spring-boot-maven-plugin插件,配置如下:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
执行mvn clean package重新打可执行jar,打包完成后可以用jar tf 你的jar包名.jar | grep mariadb命令检查是否包含对应的驱动包
- 修正依赖scope:确认
mariadb-java-client依赖未设置scope,或显式设置为compile即可,如下:
<dependency> <groupId>org.mariadb.jdbc</groupId> <artifactId>mariadb-java-client</artifactId> <version>2.7.4</version> <!-- 不要加<scope>provided</scope>或者<scope>test</scope> --> </dependency>
- 校验驱动类配置:如果配置文件中显式指定了驱动类,确认拼写正确:
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
Spring Boot 2.x版本在检测到classpath下有mariadb驱动时会自动适配该驱动类,不写该配置也可正常运行
- 校验部署包完整性:重新传输jar包到Ubuntu服务器,避免传输过程中文件损坏,部署前可用
md5sum命令对比本地和服务器上的jar包哈希值是否一致
内容的提问来源于stack exchange,提问作者cp.
相关产品推荐
相关产品推荐

