Я не сторонник использования преобразователя URL-адресов при общении с менеджерами репозиториев Maven. Проблема в том, что Maven имеет специальную и довольно уникальную обработку для ревизий моментальных снимков..... Преобразователь URL-адресов лучше подходит для использования с репозиториями ivy.
Я использую Nexus, но следующее также должно относиться и к Artifactory. Следующий файл настроек настраивает Maven Central и два моих размещенных репозитория (репозитории Maven бывают двух видов: выпуск или моментальный снимок):
<ivysettings>
<settings defaultResolver="repos" />
<resolvers>
<chain name="repos">
<ibiblio name="central" m2compatible="true"/>
<ibiblio name="my-releases" m2compatible="true" root="https://myhost/releases"/>
<ibiblio name="my-snapshots" m2compatible="true" root="https://myhost/snapshots"/>
</chain>
</resolvers>
</ivysettings>
Вы заметите, что я использую преобразователь ibilio, который имеет внутреннюю логику для расшифровать специальную обработку снимков Maven.
Когда мне требуется версия моментального снимка, я думаю, что объявляю ее явно следующим образом:
<ivy-module version="2.0">
<info organisation="myOrg" module="Demo"/>
<dependencies>
<dependency org="myOrg" name="myModule" rev="2.7-SNAPSHOT"/>
..
</dependencies>
</ivy-module>
Под капотом преобразователь ibilio читает файлы метаданных репозитория Maven, чтобы определить какой артефакт с отметкой времени следует извлечь из хранилища моментальных снимков.
Обновлять
Предлагаю прочитать следующую презентацию:
Он довольно хорошо описывает философию Maven, отделяющую выпуски от сборок для разработчиков (или снимков). Это также объясняет один из очень неуклюжих аспектов Maven... Два разных способа публикации артефактов...
Я подозреваю, что вы пытаетесь сделать то же, что и автор, который настраивает конвейер CD. В этом случае каждая сборка является потенциальным выпуском и должна рассматриваться как таковая (без динамических зависимостей, разрешенных моментальными снимками).
Я бы предложил ограничить моментальные снимки сборками только для разработчиков. Развертывайте только релиз-кандидаты. Проблемы с этим подходом будут заключаться в управлении большим количеством релизов. Некоторые менеджеры репозиториев (Nexus, Artifactory, Archiva) предлагают функции «постановки», которые позволяют сертифицировать или отбрасывать выпуски, не прошедшие проверку качества.
Обновление 2
Если вы используете ivy для публикации моментальных снимков в репозиторий Maven, возникает несколько проблем:
На мой взгляд, файлы с отметками времени — это одна из главных особенностей использования моментальных снимков. С помощью ivy можно предоставить только самый последний файл (перезаписывая предыдущий последний файл).
Существуют обходные пути для решения этих проблем:
- Как предлагается во второй ссылке, вы можете полностью игнорировать метаданные (установив для атрибута «useMavenMetadata» значение false) и по умолчанию вернуться к более старому механизму сравнения имен файлов ivy. Это решает проблему только для клиентов ivy.
- Менеджер репозитория должен иметь возможность регенерировать файлы метаданных (по крайней мере у Nexus есть задача сделать это).
- Используйте задачу Maven ANT.
Последнее предложение не такое безумное, как кажется. Во-первых, это единственный известный мне способ поддержки моментальных снимков с временными метками, а во-вторых, клиент Maven, по-видимому, выполняет много дополнительной обработки (обновление метаданных модуля), которая в значительной степени недокументирована.
person
Mark O'Connor
schedule
21.01.2013