Maven - включить все подмодули pom как зависимости в другой модуль - PullRequest
12 голосов
/ 21 октября 2011

У нас есть модуль maven, который настроен так:

a (parent)
  -> b (submodule)
  -> c (submodule)
  -> d (submodule)

Этот список подмодулей будет расти с течением времени (до 20 или около того).У нас есть другой модуль, который будет включать в качестве зависимостей все подмодули a.Есть ли аккуратный способ сделать это, вместо того, чтобы вручную поддерживать список подмодулей в синхронизации со списком зависимостей.Т.е. есть ли способ включения и всех подмодулей в качестве зависимости?

Ответы [ 3 ]

4 голосов
/ 21 октября 2011

У вас есть несколько вариантов здесь:

  1. Без изменений.Перечислите все зависимости в каждом пом.Однако, если у них есть общий родительский объект, вы можете использовать dependencyManagement в родительском pom, чтобы установить версии для различных зависимостей.В дочерних poms вам не нужно указывать версию.См. этот раздел из примера Maven .Недостатком этого подхода является то, что вам приходится переписывать одни и те же зависимости снова и снова.
  2. Создайте родительский pom, в котором перечислены все общие зависимости.Смотрите пример здесь .Недостатком здесь является то, что вы ограничиваете все проекты, которые хотят воспользоваться этим, для использования родительского проекта, когда им может понадобиться использовать другой родительский проект по какой-то причине.
  3. Ожидание Maven mixins Последний раз я слышал, что все еще не готов .
  4. .Имеет ли смысл проекты зависеть от стольких различных модулей и интерфейсов?Чтобы уменьшить сцепление , вы можете создать один интерфейс, который могут использовать эти новые проекты.Несколько мультимодульных проектов с открытым исходным кодом, таких как Apache Axis2, следуют этому шаблону.Один модуль содержит ваши 20 зависимостей и предоставляет интерфейс, который могут вызывать новые модули.Новые модули могут просто перечислить этот основной модуль как зависимость и все 20 зависимостей как транзитивные зависимости.

Я думаю, что выбор № 4, вероятно, правильный, но я недостаточно знакомс вашей ситуацией.

1 голос
/ 24 июля 2015

Помимо конструктивных соображений, это легко сделать - просто включите <type>pom</type> в вашу зависимость, указывающую на родительский pom. Например:

<dependency>
    <groupId>my.group.id</groupId>
    <artifactId>a</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <type>pom</type>
</dependency>
0 голосов
/ 21 октября 2011

Единственный способ, которым зависимости включаются «автоматически», это через механизм транзитивных зависимостей, и он работает только путем извлечения зависимостей зависимостей, поэтому, если у вас нет pom, который зависит от всех подмодулей, нет, вы не получите их без перечисления их всех. Необходимость сделать это указывает на недостаток в дизайне вашего проекта. Если модули «все или ничего», то они, вероятно, не являются отдельными модулями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...