2012-06-15 2 views
2

У меня проблемы с пониманием того, как работает last.integration.Определение поведения «latest.integration» в Ivy

У меня есть пример, который не дает выход, упомянутый в: http://ant.apache.org/ivy/history/latest-milestone/tutorial/defaultconf.html

, который говорит, местный распознаватель имеет приоритет над другими резольверами, независимо от времени публикации.

Моего ivysettings.xml выглядит следующим образом:

<resolvers> 
<chain name="download-chain" returnFirst="false" > 
    <url name="nexus-repo" m2compatible="true" > 
     <artifact pattern="${nexus}/[organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext]" /> 
     <ivy pattern="${nexus}/[organisation]/[module]/[revision]/[type]s/[artifact].[ext]" /> 
    </url> 
    <resolver ref="local" /> 
</chain> 
</resolvers> 

здесь я заявляю, что у меня есть хранилище нексуса URL-адрес и ссылка на значение по умолчанию локального. Я использую эту цепочку, когда хочу разрешить свои зависимости.

Я строю назначенный артефакт и опубликовать его в местный со статусом «интеграции» с пересмотром «ГОЛОВЫ» (что-то вроде SNAPSHOT для нас), сначала с помощью локального распознаватель:

<ivy:publish 
    overwrite="yes" 
    update="true" 
    artifactspattern="${project.dist.dir}/[artifact]-[revision](-[classifier]).[ext]" 
    resolver="local" 
    settingsRef="ivy.nexus" 
/> 

и восстановить его снова и опубликовать его в хранилище связующего:

<ivy:publish 
    overwrite="yes" 
    update="true" 
    artifactspattern="${project.dist.dir}/[artifact]-[revision](-[classifier]).[ext]" 
    resolver="publish-url" 
    forcedeliver="true" 
    settingsRef="ivy.nexus" 
/> 

у меня есть еще один проект, который объявляет предыдущий артефакт, как зависимость с пересмотром «latest.integration».

Я ожидаю, что артефакт должен быть загружен из локального хранилища независимо от порядка объявленных преобразователей. Но это не так. Загруженный артефакт всегда относится к указанному выше распознавателю. Изменение имени «локального» преобразователя ничего не сказалось. Порядок всегда имеет значение.

Я попытался добавить change = "true" к моей зависимости. Это не помогло.

В этом вопросе: Ivy: Forcing local snapshot for dependency

спрашивающий упоминает даже различное поведение, а именно, что самая последняя подобран (порядок резольверами даже не имеет значения).

SO, чтобы обернуть его и жалко продление: Как получить артефакт:

1) всегда latest.integration (самая последняя), независимо от их местоположения.

2) всегда из местного, даже если в других местах имеется более новая версия интеграции.

3) Неужели я это не знаю?

ответ

0

В конце концов, я мог бы сделать заказ несущественным.

Я не уверен, насколько далеко я ушел, но я:

Я использовал последнее = «последнее время» в цепи распознавателе, а также в URL-распознавателе. Этого было недостаточно, и когда я отлаживал код, я обнаружил, что каждый резольвер судится по его собственному «последнему». Так я отменяю локальный репозиторий вроде этого:

<filesystem name="local" latest="latest-time" > 
    <ivy pattern="${ivy.local.default.root}/${ivy.local.default.ivy.pattern}"/> 
    <artifact pattern="${ivy.local.default.root}/${ivy.local.default.artifact.pattern}"/> 
</filesystem> 
1

я рекомендую прочитать следующий ответ на публикацию артефактов Nexus

how to publish 3rdparty artifacts with ivy and nexus

Используйте ibiblio распознаватель, это гораздо проще.

Второй совет состоит в том, чтобы иметь четкое разделение между интеграцией и версиями, в рамках вашей логики ANT. Первый может использовать временную метку, поскольку она является ревизией, тогда как последняя должна иметь стратегию для поддержания добавочного номера ревизии (это совершенно другой вопрос).Maven называет эти сборки «SNAPSHOT» или «Release» и реализует два разных типа репозитория для их поддержки.

Последний совет заключается в том, чтобы избежать использования локального репозитория, если только вы не решите хранить свои интеграционные сборки. Ivy поддерживает локальный кеш скачанных артефактов, он редко стоит усилий или поддерживает локальное репо.

+0

Это займет некоторое тестирование моей стороны, и я уезжаю в офис на выходные. Однако локальный репозиторий будет использоваться для локальной разработки, где разработчики хотят протестировать свою текущую версию проекта с текущей версией проекта B. Использование связи для этого означало бы совместное использование артефактов разработки, и это не то, что мы хотим. Я буду тестировать POM, и я надеюсь, что они будут вести себя более последовательно. Последнее, пример, который вы предложили, был одним из моих уроков в этой вещи. Спасибо чувак. –

+0

@EyadEbrahim Рад помочь. Сохранение снимков разработки локально, безусловно, будет проще для плюща. Если Nexus используется только для релизов, то моим последним советом является проверка задачи с плюсом. Вы обнаружите, что это очень полезно для увеличения номера выпуска, основываясь на том, что было ранее опубликовано. –

Смежные вопросы