У меня есть вопрос, касающийся свойств в многомодульном проекте.
Рассмотрим следующую трехуровневую структуру проекта:
project
+- pom.xml (packaging: pom) //referred to as super-pom
+- module_group
+- pom.xml (packaging: pom) //referred to as group-pom
+- module
+-pom.xml (packaging: jar) //referred to as module-pom
В супер-поме я определяю свойство revision , которая получает значение по умолчанию "unknown".
Дополнительно я объявляю и использую buildnumber-maven-plugin
, настроенный для получения ревизии svn и помещения ее в свойство revision .
Далее я настраиваю maven-jar-plugin
для записи этого свойства в манифест.
В th-модуле я объявляю использование buildnumber-maven-plugin
, чтобы оно действительно выполнялось.
Все это работает при непосредственном построении модуля, т.е. при выполнении только модуля-пом.Манифест содержит ревизию, сообщаемую buildnumber-maven-plugin
, как указано в консоли.
Однако, если я выполняю супер-помпу или групповую помпу, значение по умолчанию для ревизия записывается в манифест, хотя buildnumber-maven-plugin
выполняется и получает правильную ревизию (печатает ее на консоли до запуска maven-jar-plugin
).
Итак, у меня естьощущение, что я что-то упускаю в наследовании свойств в многомодульных проектах.
У кого-нибудь есть идеи, что тут может быть не так?Или кто-нибудь может указать мне на описание того, как на самом деле обрабатываются свойства в этих случаях (к сожалению, я пока не смог найти хорошее описание)?
Обновление
Я провел некоторое исследование и несколько тестовых прогонов с выводом отладки (опция -X
), и из того, что я нашел до сих пор, я предполагаю, что моя проблема заключается в следующем:
1) Во время синтаксического анализа свойств, используемых впом заменены их значения.
Рассмотрим этот частичный pom:
<!-- declare the property default value -->
<properties>
<revision>default</revision>
</properties>
...
<!-- use the property -->
<someconfig>${revision}</someconfig>
После того, как pom оценен, создается впечатление, что оно соответствует состоянию:
<properties>
<revision>default</revision>
</properties>
...
<!-- The property seems to be "statically" replaced -->
<someconfig>default</someconfig>
2)Плагин, который устанавливает фактическое значение свойства, запускается впоследствии, даже если на этапе validate
.
Таким образом, само свойство правильно установлено на новое значение, но оно больше не читается.
3) Плагин, который использует <someconfig>
(в моем случае это будет maven-jar-plugin
), теперь работает с <someconfig>default</someconfig>
и, таким образом, он вообще не читает revision
.
Может кто-нибудь подтвердитьэто?