Как я могу заставить мои подпроекты наследовать версии зависимостей от суперпроекта в многомодульном проекте Maven?

У меня есть многомодульный проект Maven, и я хочу, чтобы подпроекты унаследовали версии для сторонних зависимостей, которые я указал в Родительском проекте. Это так, что мне не нужно копировать номера версий везде. Это не работает, хотя и когда я оставляю номер версии на детях, я получаю ошибку:

dependencies.dependency.version is missing

что мне нужно изменить, чтобы получить эту работу?

3 ответов


на <dependencyManagement> раздел родительского POM предназначен для этой цели:

dependencyManagement: используется POMs для управления информацией о зависимостях во всех его дочерних элементах. Если использует dependencyManagement чтобы определить зависимость от junit:junit:4.0, то POMs, наследующие от этого, могут установить свою зависимость, давая groupId=junit и artifactId=junit только, тогда Maven заполнит version установить с помощью родителей. Преимущества этого метода очевидны. Зависимость детали могут быть установлены в одном центральном расположении, которое будет распространяться на все наследующие POMs. Кроме того, версия и область артефактов, которые включены из транзитивных зависимостей, также могут управляться путем их указания в разделе управление зависимостями.


У вас есть какие-либо зависимости войны?

существует открытая Джира, которая может быть связана с проблемой, с которой вы столкнулись:

(MNG-2241) версии требуются, когда это не должно быть с проектами с несколькими модулями и военными зависимостями


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

<properties>
  ...
  <guice.version>2.0</guice.version>
</properties>

и затем:

<dependency>
  <groupId>com.google.inject</groupId>
  <artifactId>guice</artifactId>
  <version>${guice.version}</version>
</dependency>

не совсем то, что вы просите возможно, но это означает, что вы должны только изменить версии в одном месте.