You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS下IntelliJ IDEA中Tomcat Servlet项目添加MySQL JDBC驱动失败求助

Tomcat Servlet项目MySQL JDBC驱动加载失败解决指南

问题背景

在MacOS系统的IntelliJ IDEA中开发基于Tomcat的Servlet项目时,添加MySQL JDBC驱动后仍出现ClassNotFoundException: com.mysql.jdbc.Driver错误,已尝试以下方法均无效:

  • 添加外部JAR包;
  • 通过File=>Project Structure=>Libraries导入MySQL Connector;
  • 将驱动添加到Artifact中。

相关代码

数据库连接类

package dao;

import java.sql.Connection;
import java.sql.DriverManager;

public class DbConnection {
    private static Connection connection;

    static {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/supermarche", "root","password");
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public static Connection getConnection() {
        return connection;
    }
}

Servlet代码

package com.marcheli.shoping;

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import user.Client;
import user.ManagementUser;

import java.io.IOException;

public class main extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ManagementUser manage = new ManagementUser();
        // ManagementUser类调用getConnection()执行数据库操作
        Client c = manage.signUp(new Client("h","12334","email@sj",
                "072737","ksk","jd"));

        request.getRequestDispatcher("index.jsp").forward(request, response);
    }
}

错误日志

java.lang.ExceptionInInitializerError
user.ManagementUser.signUp(ManagementUser.java:14)
com.marcheli.shoping.main.doGet(main.java:18)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:683)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:792)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

根因:
java.lang.RuntimeException: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
dao.DbConnection.(DbConnection.java:16)
user.ManagementUser.signUp(ManagementUser.java:14)
com.marcheli.shoping.main.doGet(main.java:18)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:683)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:792)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

解决步骤

1. 匹配MySQL版本与驱动类名

若使用MySQL 8.0及以上版本,驱动类名需改为com.mysql.cj.jdbc.Driver,同时URL需添加时区参数:

Class.forName("com.mysql.cj.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/supermarche?useSSL=false&serverTimezone=UTC", "root","password");

2. 直接部署驱动到Tomcat lib目录

将MySQL Connector JAR包复制到Tomcat安装目录下的lib文件夹,重启Tomcat。此方式能确保Tomcat运行时直接加载到驱动。

3. 重新配置Artifact

  • 打开File => Project Structure => Artifacts;
  • 选中当前Web应用Artifact,点击右侧+按钮,选择Library Files;
  • 找到已添加的MySQL Connector库并添加;
  • 重新构建Artifact并部署到Tomcat。

4. 检查构建工具依赖范围(若使用Maven/Gradle)

确保MySQL Connector的依赖范围为compile或runtime,避免设置为provided:
Maven示例:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version>
    <scope>runtime</scope>
</dependency>

Gradle示例:

implementation 'mysql:mysql-connector-java:8.0.33'

5. 清理重建项目

  • 执行Build => Clean Project;
  • 执行Build => Rebuild Project;
  • 重启IntelliJ和Tomcat后再次测试。

内容的提问来源于stack exchange,提问作者HamzaDevXX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 08:38:49