Плагин Maven «версии» не выбирает свойства из родительского - PullRequest
2 голосов
/ 02 сентября 2010

Я не знаю, что-то упустил, но у меня проблема с плагином Codehaus версии для Maven.Вот упрощение моей ситуации:

  • root:
    • moduleA
    • moduleB

'root'является агрегатором POM, то есть объявляет moduleA и moduleB как дочерние modules , а A и B оба имеют root как parent .

И A, и B зависят от project-C , но версия этой зависимости определена в свойстве - скажем <project-C.version> - не в жестком коде.Это свойство определено в root , поэтому и A, и B наследуют одно и то же значение версии для project-C.

В корневом POM:

<properties>
    <project-C.version>1.0</project-C.version>

В модуле Aи B (помните, root является родительским):

<dependency>
    <groupId>com.blah</groupId>
    <artifactId>project-C</artifactId>
    <version>${project-C.version}</version>
</dependency>

Теперь, скажем, доступна более новая версия 1.1-SNAPSHOT проекта C.Я хочу использовать плагин версии , чтобы показать это мне, поэтому я запускаю:

$ cd /projects/root
$ mvn versions:display-property-updates -DallowSnapshots=true

, но все, что я получаю, это что-то вроде этого:

[INFO] Building root  
[INFO] This project does not have any properties associated with versions

[INFO] Building moduleA  
[INFO] This project does not have any properties associated with versions

[INFO] Building moduleB  
[INFO] This project does not have any properties associated with versions

Это не имеет значения, если я запускаю его на root, moduleA или moduleB: это всегда говорит об этом.Конечно, это работает, если я жестко закодирую номер версии Project-C в зависимостях.

Итак, в заключение: я хочу централизовать версии зависимостей как свойства в корневом POM (агрегаторе / родительском) POM и хочу версии плагин для выбора целей для работы со свойствами, а именно:

  • display-property-updates
  • update-properties

Как мне это сделать?Я что-то пропустил?Это ошибка в плагине версий?

Ответы [ 2 ]

2 голосов
/ 02 сентября 2010

Похоже, что ответ, который вы получили в MVERSIONS-123 , не является точным:

Если свойства определены в родительском pom, тогда запустите цель из родительского pom (включая дочерние проекты как часть агрегатора, если необходимо, чтобы подобрать зависимости)

Эта часть не соответствует действительности или, по крайней мере, не происходит. Кажется, плагин версии только внешний вид или свойства в текущем пом. Объявление следующего в родителе работает:

<properties>
    <project-C.version>1.0</project-C.version>
</properties>

<dependencies>
  <dependency>
    <groupId>com.blah</groupId>
    <artifactId>project-C</artifactId>
    <version>${project-C.version}</version>
  </dependency>
</dependencies>

Но объявление свойства в родительском элементе и зависимости в дочернем элементе отсутствует (даже при запуске плагина для родительского элемента).

Теперь, если поведение, описанное Стивеном в MVERSIONS-123 , является ожидаемым поведением, тогда есть ошибка (и вы должны предоставить простой проект, позволяющий воспроизводить, я сделал простой тест с Юнит как зависимость).

Но в вашем случае (хотя, возможно, это был просто пример), поскольку и A, и B зависят от C, почему бы вам не поместить C в родительский элемент? Это будет работать. В любом случае вы должны использовать dependencyManagement (и это сработает, если вы не хотите наследовать его везде).

2 голосов
/ 02 сентября 2010

Похоже, что это работа для раздела dependencyManagement в корневой папке ...

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