Есть несколько похожих вопросов, но ничего подобного. Как вы справляетесь с этой ситуацией (типичный сценарий):
Проект из 8-11 дочерних проектов, имеющий родительский артефакт / проект и один основной проект, который в основном использует / объявляет эти другие как модули.
Проблема в том, что все проекты "строго" разделяют только общие зависимости, например testng, logging, apache commons and stuff
. Но всегда, как и 3 из них, используют 50-60% одних и тех же конкретных зависимостей (apache-chemistry, jackrabbit, abdera и т. Д.), Еще 2-3 из них также используют 50-60% одинаковых, но разных зависимостей. . И главный использует много таких же глубин.
Я не могу поместить эти «нестрогие» общие зависимости в родительский проект, чтобы другие унаследовали их. Так что наследуются только общие deps. И существует множество повторяющихся зависимостей. А управлять их версиями я могу только через <dependencyManagement>
.
Другой вариант - родительский pom содержит большую часть зависимостей, но дочерние проекты наследуют даже те, которые им не нужны.
У меня могло быть больше одного родительского проекта, но это нехорошо. Также наследование от родительского проекта может быть кошмаром, потому что вы не знаете, какие зависимости нужны проекту, если вы не документируете / не комментируете определение родительского pom должным образом.
Другой способ - создать pom-артефакты, которые служат только в качестве контейнеров зависимостей - они объявляют определенные группы зависимостей, так что модули просто объявляют их для получения транзитивных зависимостей. Но послушайте, вы бы хотели развернуть и зафиксировать какой-нибудь
OneDepArtifact объявляет jackrabit, abdera, chemistry
ДругойDepArtifact объявляет htmlcleaner, google-api, tika
ThirdDepArtifact, объявляющий spring, httpclient, selenium
Это огромный беспорядок, я не уверен, правильно ли я использую <dependencyManagement>
, похоже, это полезно только для управления версиями зависимостей.
Я подумывал адаптировать разработку своего приложения к «многомодульному дизайну maven». Но если вы хотите создать службы / бины Spring, которые просто используют различные библиотеки в одном модуле, вы не реализуете их в другом модуле только потому, что они используют библиотеку, которую также использует другой модуль :-)