У меня относительно большой проект maven с цепочкой зависимостей модулей, и я пытаюсь автоматизировать процесс сборки через Jenkins, который загружает файлы jar модуля с номером версии. При этом мне бы хотелось, чтобы у модулей был номер версии по умолчанию (по умолчанию 0.0.0.dev), если в вызове maven командной строки не указаны аргументы.
Сначала я попытался <version>0.0.0.dev</version>
, полагая, что могу переопределить это значение с помощью командной строки maven. Оказывается, это не так: http://jira.codehaus.org/browse/MINSTALL-30. Есть комментарий, который привел меня к моей следующей попытке: <version>${build.number}</version>
, где я передал бы номер сборки в командную строку. Очевидно, что из-за того, что это свойство больше нигде не установлено, если номер сборки не был указан, я получу jar-файлы, такие как module.name - $ {build.number} .jar. Простое исправление: как предложено в комментарии, добавьте <properties><build.number>0.0.0.dev</build.number></properties>
.
Это вызывает переходную проблему, когда я пытаюсь распространить эту версию на зависимости модуля. Предположим, что у меня модуль A зависит от moduleB, зависит от moduleC, где я требую, чтобы у каждого был один и тот же номер версии. Пример зависимости: в файле pom модуля A:
<dependency>
<groupId>groupID</groupId>
<artifactId>moduleB</artifactId>
<version>${version}</version>
</dependency>
Запуск mvn compile –Dbuild.number=9.9.9.9
на модуле A: он ищет модуль B-9.9.9.9.jar, но ищет модуль C-0.0.0.dev.jar. Это связано с тем, что свойство build.number не является транзитивным (в отличие от фактического номера версии).
Мой вопрос: как я могу получить желаемое поведение? Без дополнительных аргументов, передаваемых в командной строке, создайте jar с номером версии по умолчанию, но позвольте этому значению по умолчанию быть переопределенным таким же образом, как этот модуль для других моих модулей с той же версией.