IntelliJ IDEA中Maven项目打jar包后DriverManager找不到mariadb驱动如何解决
问题根本原因
该报错核心原因是运行时类路径中不存在MariaDB驱动类,IDEA本地运行时依赖会被自动引入,但默认打包后的jar仅包含项目自身代码,未携带第三方依赖,或是DriverManager的自动驱动扫描机制失效导致。
解决方案
- 方案1:使用Maven插件打包含所有依赖的可执行jar
在pom.xml中添加maven-assembly-plugin插件配置,会自动把所有依赖打入最终jar包:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.3.0</version> <configuration> <archive> <manifest> <!-- 替换为你项目的主类全路径 --> <mainClass>com.bremea.packagename.YourMainClass</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
配置完成后执行mvn package命令,会在target目录生成后缀为-jar-with-dependencies.jar的文件,直接运行该文件即可。
- 方案2:显式加载驱动类(适配自动扫描失效场景)
部分类加载环境下JDBC4的自动驱动扫描会失效,可在调用DriverManager.getConnection前手动加载驱动类,修改后的代码如下:
public static void init() { try { // 手动加载MariaDB驱动 Class.forName("org.mariadb.jdbc.Driver"); connection = DriverManager.getConnection("jdbc:mariadb://ip:3306/db", "uname", "pass"); } catch (SQLException | ClassNotFoundException throwables) { throwables.printStackTrace(); } }
- 方案3:调整IDEA自带Artifact打包配置
如果坚持使用IDEA的Artifact功能打包,需要手动把依赖加入输出:
- 打开
File -> Project Structure -> Artifacts - 找到当前的jar打包配置,在右侧
Available Elements列表中找到mariadb-java-client依赖 - 右键选择
Put into Output Root,保存配置后重新打包即可
- 额外检查项
确认pom.xml中mariadb依赖的scope没有被设置为provided,该属性会导致依赖不被打包到最终产物中,改为默认的compile即可。
内容的提问来源于stack exchange,提问作者jade
相关产品推荐
相关产品推荐

