NoClassDefFoundError org / springframework / jdbc / core / ConnectionCallback в тестах - PullRequest
0 голосов
/ 13 января 2020

Я застрял, я получаю эту ошибку даже после того, как я исключил все, что связано с 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 во время выполнения. Правильно?

Пожалуйста, помогите мне отладить это.

...