Родительский POM Maven против управления зависимостями спецификации

Скажем, у меня есть родительский POM root maven, который определяет foo:bar:1.0.0 в управлении зависимостями. У меня есть еще один родительский POM parent, который использует root в качестве родительского (просто чтобы добавить еще один слой к примеру). Наконец, у меня есть список материалов bom, который использует root в качестве своего родителя, но переопределяет foo:bar:2.0.0 в управлении зависимостями.

В моем проекте app я наследую от parent, а затем импортирую спецификацию в разделе управления зависимостями app

root (foo:bar:1.0.0) <- parent <- app+bom
 ^
 |
bom (foo:bar:2.0.0)

Какой раздел управления зависимостями выигрывает? Какую версию foo:bar я получу?

Я знаю, что если бы я напрямую включил foo:bar в раздел управления зависимостями app, он переопределил бы то, что унаследовано от родителя. Но является ли импорт спецификации в разделе управления зависимостями эквивалентным прямому включению ее в раздел управления зависимостями и достаточным для переопределения родительской спецификации? Или унаследованное foo:bar от родительского управления зависимостями имеет приоритет?


person Garret Wilson    schedule 30.05.2019    source источник
comment
Ближе всего к проекту думаю.   -  person K.Nicholas    schedule 30.05.2019
comment
Импорт бомбы не то же самое, что помещать их напрямую в dependencyManagement, но более слабый. Я так и не нашел документа, определяющего приоритет, и у меня лишь смутное представление о примерах.   -  person J Fabian Meier    schedule 30.05.2019
comment
Если вы не уверены, какие зависимости в каких версиях используются в вашем проекте, вы можете попробовать mvn dependency:tree или mvn help:effective-pom.   -  person Robin479    schedule 12.02.2020


Ответы (1)


Согласно правилам приоритета maven, версия из корня победит, и поэтому вы получите foo: bar: 1.0.0, который вы сможете увидеть, если посмотрите на эффективный POM. Я думаю, что это делает проект спецификации менее эффективным, поскольку вы не можете использовать его для переопределения версии из родительского элемента и должны объявлять версию в приложении или в родительском элементе.

Приоритет

Итак, существует несколько способов определения версий, что означает порядок приоритета.

  • Версии, указанные в прямом объявлении в POM, имеют наивысший приоритет.
  • Версия, указанная в родительском pom, имеет второй приоритет.
  • Версия из импортного помпа занимает третье место
  • Наконец, все, что мы получаем от посредничества зависимостей
person pyropunk51    schedule 03.09.2019
comment
В соответствии с правилами приоритета maven ... Можете ли вы предоставить авторитетную ссылку? - person Garret Wilson; 03.09.2019
comment
Я нашел это: baeldung.com/spring-maven-bom также раздел об импорте Спецификация на сайте maven maven.apache.org/guides/ Introduction /, но приоритет только намекает. - person pyropunk51; 27.09.2019
comment
Что ж, на практике это выглядит правдой, только что был странный случай, и я пошел подтверждать. Вот как он себя ведет - в моем случае импортированный pom находится после родительского pom, и кто-то изменил родительский pom ... - person Neikius; 16.03.2020