MySQL 8.0.18连接JUnit测试报错问题求助
解决MySQL 8.0驱动在JUnit测试中的警告问题
我帮你梳理下当前的问题:你已经正确使用了MySQL 8.0的新驱动com.mysql.cj.jdbc.Driver,Java代码本身也能成功连接数据库,但JUnit测试控制台却抛出了旧驱动的警告。这大概率是依赖冲突或者SPI类加载机制的小问题,下面给你几个针对性的修复方案:
1. 排查并排除旧MySQL驱动依赖
虽然你已经在pom里引入了mysql-connector-java:8.0.18,但可能其他依赖(比如log4jdbc这类工具库)偷偷引入了旧版本的mysql驱动。你可以用Maven命令生成依赖树,找出冲突源:
mvn dependency:tree
如果发现有mysql-connector-java的5.x版本被间接引入,就在对应的依赖里添加排除规则,比如假设是log4jdbc带来的旧驱动:
<dependency> <groupId>org.bgee.log4jdbc-log4j2</groupId> <artifactId>log4jdbc-log4j2-jdbc4</artifactId> <version>1.16</version> <exclusions> <exclusion> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </exclusion> </exclusions> </dependency>
2. 解决JUnit版本冲突
你的pom.xml里同时引入了JUnit 4.12和JUnit Jupiter(JUnit 5),这两个版本会导致测试环境的类加载混乱——而你实际使用的是JUnit 4的@Test注解,完全可以移除JUnit Jupiter的依赖:
<!-- 移除这个不必要的依赖 --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>RELEASE</version> <scope>test</scope> </dependency>
只保留JUnit 4的核心依赖即可:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency>
3. 优化驱动加载方式(可选)
MySQL 8.0的驱动已经支持SPI自动注册,你可以去掉手动加载驱动的代码,避免类加载层面的潜在冲突。修改后的测试方法:
@Test public void testConnection() throws Exception { // 移除Class.forName(DRIVER);这行代码 try(Connection connection = DriverManager.getConnection(URL, USER, PASSWORD)) { System.out.println(connection); } catch (Exception e) { e.printStackTrace(); } }
4. 清理Maven缓存
有时候Maven缓存的旧依赖会导致奇怪的问题,执行以下命令清理缓存并重新构建项目:
mvn clean install -U
按照上面的步骤调整后,再运行JUnit测试,那个旧驱动的警告应该就会消失了。
内容的提问来源于stack exchange,提问作者Ppojin
相关产品推荐
相关产品推荐

