介绍
在编写与 MySQL 数据库交互的 Java 应用程序时,java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver 错误是开发人员常遇到的问题。
当 JVM 在运行时尝试加载 MySQL JDBC 驱动程序类但在类路径中找不到时,就会出现这个异常。如果没有包含这个驱动程序类的 MySQL 连接器 JAR,您的应用程序将无法建立与数据库的连接。
在这个综合指南中,我们将深入探讨此错误的各种原因,并提供详细的解决方案示例,以帮助解决所有情况下的问题。
常见原因
JVM 无法在运行时找到 com.mysql.cj.jdbc.Driver 类的几个关键原因如下:
构建工具中缺少依赖声明
现在,大多数 Java 项目都使用构建工具如Maven或Gradle来管理依赖项。如果您没有在 pom.xml 或 build.gradle 文件中声明 MySQL 连接器作为依赖项,构建项目时将无法下载该 JAR。
例如,在 Maven 中没有这个依赖项:
1<dependency>
2 <groupId>mysql</groupId>
3 <artifactId>mysql-connector-java</artifactId>
4 <version>8.0.32</version>
5</dependency>
mysql-connector-java-8.0.32.jar 将缺失在您项目的目标依赖文件夹中,导致 JVM 无法找到 MySQL 驱动程序类。
MySQL 连接器的过时版本
另一个常见原因是在项目构建中使用了过时版本的 MySQL 连接器库。
例如,您可能已经声明了版本 5.1.45 作为依赖项,但是这个较旧版本使用的类名是 com.mysql.jdbc.Driver 而不是 com.mysql.cj.jdbc.Driver。因此,即使 JAR 文件存在,JVM 也无法找到预期的驱动程序类。
始终在Maven 中央存储库中查看最新版本,并保持您的项目更新。
JAR 未正确添加到类路径
最后,即使您的项目声明了依赖项并下载了 JAR 文件,您仍然需要配置您的 IDE、构建工具或服务器,将 JAR 文件放入类路径中。
这意味着在 Eclipse 的构建路径中包含它,在类似WildFly的 Java EE 服务器的 lib 文件夹下放置它,或者在运行 Java 应用程序时,将 JAR 文件设置在-cp 类路径选项中。
如果 JAR 文件在运行时不在类路径中,即使 JAR 文件存在于项目的依赖项中,JVM 也会抛出异常。
解决方案和示例
了解了导致此错误的原因后,让我们通过具体示例来介绍解决方案:
在构建工具中声明依赖项
Maven
1<dependency>
2 <groupId>mysql</groupId>
3 <artifactId>mysql-connector-java</artifactId>
4 <version>8.0.32</version>
5</dependency>
Gradle
1implementation 'mysql:mysql-connector-java:8.0.32'
然后重新构建您的项目以获取 JAR 文件到构建输出文件夹中。
手动将 JAR 添加到项目中
Eclipse
右键单击项目 → 构建路径 → 配置构建路径
在库选项卡下,点击添加 JAR 并选择 MySQL 连接器 JAR 文件
IntelliJ IDEA
文件 → 项目结构 → 模块 → 依赖项选项卡
点击+ → JAR 文件或目录 → 选择 JAR
在类路径中设置 JAR
可执行 JAR
1java -cp mysql-connector-java-8.0.32.jar:my-app.jar MainClass
Java EE 服务器(例如 WildFly)
将 JAR 文件放置在/standalone/deployments/lib 文件夹下
将 JAR 添加到 WEB-INF/lib
对于 Java Web 应用程序,请将 JAR 文件放置在项目的 WEB-INF/lib 目录中。
故障排除提示
- 更新构建工具以获取最新的依赖版本
- 检查是否存在冲突的重复 JAR 版本
- 重新构建项目并清理依赖项
- 验证数据库连接 URL 和凭据
- 使用最新稳定的 MySQL 连接器版本
概述
当运行时缺少 MySQL JDBC 驱动程序 JAR 的 classpath 时,会出现 java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver 错误。仔细声明依赖关系,手动包含 JAR 并设置 classpath 可以解决此问题。保持项目依赖关系的最新状态至关重要。