MacOS下IntelliJ IDEA中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

