Автоматический подбор версий зависимостей Spring Boot и Spring Framework приложений в сборщиках Maven и Gradle

В старых Spring Framework приложениях часто возникала проблема согласования версий зависимостей. Например, если в проекте используется org.springframework.data:spring-data-jpa той или иной версии, то к этой зависимости нужно подобрать в пару org.hibernate.orm:hibernate-core какой-то подходящей версии.

Spring Boot решил эту проблему не только для собственно Spring Boot приложений, но также и для Spring Framework приложений.

Spring Boot Maven parent

Создавая новое приложение в Spring initializr, мы получаем готовое решение вопроса версий зависимостей. Часть файла pom.xml будет выглядеть примерно следующим образом:

Артефакт spring-boot-starter-parent объявляется родительским артефактом для приложения. Добавляемые стартеры (в нашем примере — spring-boot-starter-data-jpa) не снабжаются версиями. Версии входящих в состав стартера джарников определяются версией родительского артефакта.

И, действительно, если посмотреть на список загруженных зависимостей, то у всех у них, разумеется, есть номера версий:

Если есть основания полагать, что та или иная зависимость должна иметь другую версию, то её можно исключить из стартера и подключить напрямую:

Spring Boot Maven dependencyManagement

Если по каким-то причинам артефакт spring-boot-starter-parent не может быть родительским для приложения, то добиться аналогичного эффекта с автоматическим подбором версий зависимостей можно с помощью узла <dependencyManagement> в файле pom.xml:

Spring Framework Maven dependencyManagement

Очень удобно, что узел <dependencyManagement> может быть использован для автоматического подбора подходящих зависимостей и в Spring Framework приложениях. Рассмотрим следующий фрагмент файла pom.xml не Spring Boot приложения:

Обратите внимание, что была подобрана версия не только для джарника spring-data-jpa, который является частью проекта Spring, но и для джарника hibernate-core, который частью проекта не является, но является транзитивной зависимостью для некоторых компонент Spring Framework.

Gradle

В gradle для создания Spring Framework/Boot приложений используются соответствующие плагины:

Аналогично ситуации с Maven, чтобы использовать автоматический подбор версий зависимостей, gradle-проект не обязательно должен быть Spring Boot приложением. Автоматический подбор сработает и для Spring Framework приложения: