Java 测试中的NoClassDefFoundError org/springframework/jdbc/core/ConnectionCallback
我被卡住了,即使在我从Gradle依赖项中排除了任何与JDBC相关的内容之后,我也会遇到这个错误:Java 测试中的NoClassDefFoundError org/springframework/jdbc/core/ConnectionCallback,java,gradle,dependencies,noclassdeffounderror,spring-jdbc,Java,Gradle,Dependencies,Noclassdeffounderror,Spring Jdbc,我被卡住了,即使在我从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.
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
工作得很好,问题出在主项目的可传递依赖关系中的某个地方
我尝试了gradledependencies | grepjdbc
,并排除了一个名为jdbc的库。此后,问题依然存在
我试图向主项目的测试范围添加一个新的依赖项:
integrationTestImplementation group: 'org.springframework.boot', name: 'spring-boot-starter-jdbc'
在这之后,问题就消失了。但我不喜欢这个解决方案,因为它看起来像是一个解决办法,我想找到这个问题的根本原因。主项目的测试模块不需要连接到关系数据库(仅Mongo)来完成其工作,因此在运行时不需要JDBC驱动程序。对吧?
请帮我调试一下。我在将我的项目从MySQL迁移到MongoDB时也遇到了同样的错误。 我有一个测试类用
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
//其他进口。。。
@DataJpaTest
@RunWith(SpringRunner.class)
类SomeIntegrationTestIT{
// ...
}
当我将注释(和导入)替换为
import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest;
//其他进口。。。
@DataMongoTest
@RunWith(SpringRunner.class)
类SomeIntegrationTestIT{
// ...
}
错误消失了