Управление зависимостями в микросервисной архитектуре
Часто в микросервисной архитектуре возникают проблемы, связанные с обновлением версий библиотек или их подключением. Работая над каким-либо проектом в течение долгого времени можно столкнуться с тем, что разные микросервисы используют разные версии одной и той же библиотеки и ее обновление может затянуться из-за конфликтов. В данной статье я хотел бы описать один из способов решения этих проблем.
Использование своего parent pom
В большинстве случаев, готовые сборки зависимостей (например, spring-boot-starter-parent или напрямую spring-boot-dependencies) используются в pom файлах как parent. Но что, если в нескольких микросервисах нужно переопределить версию одной из зависимостей или добавить ту, которой в сборке нет?
В этом случае лучше создать свою собственную сборку версий зависимостей. Это поможет поддерживать одни и те же версии библиотек во всех микросервисах. Достаточно лишь следить за актуальностью версии вашего parent pom, а не решать конфликты в каждом микросервисе отдельно. Данный подход кажется очевидным, но почему-то многие им пренебрегают.
Делается своя сборка довольно просто с помощью менеджмента зависимостей. Также можно импортировать уже готовые сборки зависимостей. Удобнее всего выносить версии библиотек в переменные. Это поможет проще переопределять версию зависимости в конкретном микросервисе в случае крайней необходимости.
17
20231013
3.1.5
org.springframework.boot
spring-boot-starter-parent
{json.version}
В случае с плагинами вы также можете контролировать их версии:
org.jsonschema2pojo
jsonschema2pojo-maven-plugin
${jsonschema2pojo.version}
Для того, чтобы использовать ваш parent pom в микросервисе, необходимо опубликовать его в локальном репозитории командой mvn install
(или же в другом хранилище, например, nexus). Далее нужно указать parent в вашем микросервисе и подключить нужные зависимости без указания версий:
com.example
base-pom
0.0.1-SNAPSHOT
org.json
json