Какая банка заканчивается на пути к классам в инкрементальной сборке Maven? - PullRequest
2 голосов
/ 05 октября 2011

Простое Maven уточнение;Надеюсь, на это будет легко ответить опытный разработчик Maven.

У меня есть два проекта под названием mycompany-x и mycompany-y.mycompany-x указана как зависимость mycompany-y, и у каждого есть версия 1.0-SNAPHSOT.Наша сборка Maven развертывается во внутреннем хранилище Maven с помощью сервера непрерывной сборки.Снимки каждого из них передаются между разработчиками через этот сервер.Мы используем Maven 3.

В любой момент времени, когда я запускаю цель установки mycompany-y, в хранилище для mycompany-x может быть два jar: один, помеченный 1.0-SNAPSHOT, то естьрезультат локальной сборки;второй, помеченный 1.0-, загружен в качестве разрешения для 1.0-SNAPHSOT из нашего репозитория Maven.Это создает очевидную неоднозначность, когда mycompany-y пытается разрешить 1.0-SNAPSHOT mycompany-x;Я уверен, что сообщество Maven имеет явную политику для разрешения (хотя это не ясно в документации).

В следующих сценариях, какой jar (локальный или удаленный) включен в classpaththe build?

  1. Запустите установку mvn на mycompany-x и mycompany-y.
  2. Запустите установку mvn на mycompany-y, предварительно не запустив установку на mycompany-x.
  3. Запустите mvn install на mycompany-y, недавно собрав mycompany-x (а не более позднюю версию в удаленном хранилище).
  4. Запустите mvn install на mycompany-y, недавно собрав mycompany-x (но с более свежей версией в удаленном репозитории).

Примечание: Maven: Как обеспечить использование версий моментальных снимков с метками времени в classpath? ссылается на опубликованный алгоритм, который яне могу найти нигде.Я бы принял там ссылку в качестве хорошего ответа.

1 Ответ

3 голосов
/ 05 октября 2011

Вот ссылка, на которую я ссылался в другом посте - Разрешение зависимости Maven - Перспектива репозитория .

Обратите внимание, что это разрешение (к сожалению) со временем изменилось, даже с серией 3.0.x в Maven. См. Примечания к выпуску Maven для решения следующих проблем:

[MNG-4987] - [регрессия] Последняя версия, версия RELEASE или SNAPSHOT, выбранная из неправильного репозитория, когда порядок разрешения не соответствует порядку меток времени [MNG-4592] - Артефакты моментальных снимков, которые не удалось загрузить из-за проблем со связью, по умолчанию помещаются в черный список на один день. [MNG-4751] - версия снимка не разрешена для диапазона версий

Значения конфигурации для разрешения SNAPSHOT также влияют на ситуацию.

Вот пример другого плаката, посвященного SNAPSHOT

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

Как мы решили это: Вместо использования зависимостей SNAPSHOT от CI, мы разрешаем только проектам, созданным на CI, объявлять фиксированные зависимости. Мы используем плагин Maven Release , чтобы сделать выпуск релиза (не SNAPSHOT) делом одного клика. Разработчики могут (и должны) иметь SNAPSHOT, ссылающиеся друг на друга локально, но полностью исключить удаленное хранилище.

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