gpt4 book ai didi

java - 测试中的 NoClassDefFoundError org/springframework/jdbc/core/ConnectionCallback

转载 作者:行者123 更新时间:2023-12-03 03:56:02 66 4
gpt4 key购买 nike

我被卡住了,即使我从 Gradle 依赖项中排除了与 JDBC 相关的任何内容,我仍然收到此错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/jdbc/core/ConnectionCallback
at java.lang.Class.getDeclaredMethods0(Native Method)
... (skipped)
Caused by: java.lang.ClassNotFoundException: org.springframework.jdbc.core.ConnectionCallback
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
... (skipped)

堆栈跟踪仅包含 Gradle、Java 和 JUnit 的内部类。我不明白哪个类在运行时需要 JDBC 驱动程序。

我运行 gradle integrationTest,其中 integrationTest 是我的自定义 Gradle 任务。我试图为这个问题创建一个最小的、可重现的例子。我创建了一个类似但更小的 gradle 项目,我在其中使用了这个任务和一些关键依赖项并且它运行良好(我无法重现这个错误所以我不能与你分享一个小代码,抱歉)。我认为这意味着我的自定义任务 integrationTest 工作正常,问题出在主项目的传递依赖项中。

我尝试了gradle dependencies | grep jdbc 并排除了 1 个名称中提到 jdbc 的库。之后问题依旧。

我尝试在主项目的测试范围内添加一个新的依赖:

integrationTestImplementation group: 'org.springframework.boot', name: 'spring-boot-starter-jdbc'

之后,问题就解决了。但我不喜欢这个解决方案,因为它看起来像是一种变通方法,我想找到这个问题的根本原因。主项目的测试模块不需要连接到关系数据库(只有 Mongo)来完成它的工作,所以它在运行时应该不需要 JDBC 驱动程序。对吧?

请帮我调试一下。

最佳答案

当我将我的项目从 MySQL 迁移到 MongoDB 时,我遇到了同样的错误。我有一个用

注释的测试类
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;

// other imports ...

@DataJpaTest
@RunWith(SpringRunner.class)
class SomeIntegrationTestIT {
// ...
}

当我将注释(和导入)替换为

import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest;

// other imports ...

@DataMongoTest
@RunWith(SpringRunner.class)
class SomeIntegrationTestIT {
// ...
}

错误消失了。

关于java - 测试中的 NoClassDefFoundError org/springframework/jdbc/core/ConnectionCallback,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59721255/

66 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com