Maven цепочка зависимостей с тем же номером версии - PullRequest
3 голосов
/ 26 января 2012

У меня относительно большой проект 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 с номером версии по умолчанию, но позвольте этому значению по умолчанию быть переопределенным таким же образом, как этот модуль для других моих модулей с той же версией.

1 Ответ

2 голосов
/ 26 января 2012

Вы не можете распространять свойства в зависимости от одного исключения. Для всех намерений и целей pom зависимости фиксируется во время ее установки / развертывания в вашем локальном / удаленном хранилище. Если зависимость разрешается с помощью реактора (то есть зависимость строится как часть текущей сборки), свойства командной строки будут распространяться на эту зависимость pom по мере ее построения.

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