Я застрял, я получаю эту ошибку даже после того, как я исключил все, что связано с JDB C из зависимостей Gradle:
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, и Юнит. Я не понимаю, для какого класса требуется драйвер JDB C во время выполнения.
Я запускаю gradle integrationTest
, где integrationTest
- моя пользовательская задача Gradle. Я попытался создать минимальный воспроизводимый пример и для этой проблемы. Я создал похожий, но меньший Gradle-проект, где я использовал эту задачу и некоторые ключевые зависимости, и она работала хорошо (я не смог воспроизвести эту ошибку, поэтому не могу поделиться небольшим кодом с вами, извините). И я думаю, это означает, что моя пользовательская задача integrationTest
работает нормально, проблема где-то в транзитивных зависимостях основного проекта.
Я пробовал gradle dependencies | grep jdbc
и исключил 1 библиотеку, в которой упоминается jdb c в названии После этого проблема сохраняется.
Я попытался добавить новую зависимость в область тестирования основного проекта:
integrationTestImplementation group: 'org.springframework.boot', name: 'spring-boot-starter-jdbc'
После этого проблема исчезла. Но мне не нравится это решение, потому что оно выглядит как обходной путь, и я хочу найти root причину этой проблемы. Протестированному модулю основного проекта не нужно подключаться к реляционным базам данных (только Mon go), чтобы выполнять свою работу, поэтому он не должен требовать драйвера JDB C во время выполнения. Правильно?
Пожалуйста, помогите мне отладить это.