2012-01-14 6 views
6

Мы используем Ivy в течение нескольких месяцев и имеем наш собственный «Ivy Repo» на веб-сервере здесь, в офисе. Все наши проекты настроены для перехода на это репо для разрешения зависимостей.Ivy: разрешение и публикация JARs на местном уровне

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

  • разработчик получает задание добавить функцию в проект 1 (который зависит от Общая баночка)
  • в процессе разработки проект 1, разработчик понимает он/она должна внести изменения в общую банку
  • изменения общей баночки сделаны
  • Common банки должна пройти через просмотр кода и нормальный продвижение кода
  • Мастер сборки публикует новую общую банку
  • Проект 1 может возобновить развитие теперь, когда общая баночка была обновлен

Это становится смешно и болезненным для нашей команды.

Для меня очевидным решением является предоставление объектов ant в каждом проекте, которые позволяют разработчику публиковать/разрешать локально (в свою файловую систему и из нее). Таким образом, они могут сломать Common jar 9 способов на воскресенье, но не теряя 2 - 4 дня, ожидая публикации Common. Таким образом, разработчик делает локальные изменения как для Project 1, так и для Common, и код проходит через наш процесс продвижения сразу.

Я знаю, что это возможно с Айви, но я так новичок в этом, я даже не знаю, с чего начать.

В настоящее время мы используем глобальный файл ivy.settings для всех проектов. В файле настроек мы используем решение цепочки, в котором есть 1 url-резольвер внутри, который подключается к нашему «плюсовому репо».

Я считаю, Ниже приводится единственное изменение, которое будет необходимо, но я не уверен на 100%:

  • В ivy.settings нам нужно будет добавить локальный файл системы распознаватель перед тем в вызывается идентификатор URL-адреса; таким образом, мы проверяем локальную файловую систему зависимостей, прежде чем перейти к плющу репо (веб-сервер)
  • Настройки каждому проект ivy.xml с возможностью как-то, что позволяет локальный кэш публикации
  • Tweak муравей строит иметь publish-locally цели, упражнения вариант упоминалось выше

Я верю эти изменения позволят нам: (1) всегда выглядят локально зависимостей, прежде чем искать на веб-сервер, (2) публиковать локально как вариант сборки (цели).

Если это неправда, или если у меня отсутствуют какие-либо шаги, , пожалуйста, сообщите! В противном случае я, вероятно, смогу выяснить, как добавить средство распознавания файловой системы из документов Ivy, но не знаю, как заставить цель publish-locally работать. Есть идеи? Заранее спасибо!

ответ

2

Ivy поддерживает динамические поправки:

Стабильного код будет ссылаться на последнюю одобренную версию баночки Викисклада

<dependency org="my-org" name="commons" rev="latest.release"/> 

Нестабильные (в разработке) код будет ссылаться на последнюю несанкционированную версию кода

<dependency org="my-org" name="commons" rev="latest.integration"/> 

Таким образом, вам необходимо изменить процесс сборки для вашего модуля commons, чтобы иметь две цели публикации. Один для нестабильных снимков вашего кода - другой для официальных релизов.

(см атрибут статуса на плющом publish задачи)

Примечание: В Maven у вас есть два типа хранилища, выпуска и снимка. Поддержка Айви для этой концепции более тонкая и более мощная ИМХО.

2

Я также предпочел бы подход Marks.

Что касается publish-locally, вы можете указать задачу публикации, которую разрешатель (resolver="local") использовать. Таким образом, он может публиковаться в локальной файловой системе или в любом определенном распознавателе.

<ivy:publish 
     resolver="local" 
     overwrite="true" 
     revision="${project.version}"> 
     <artifacts pattern="dist/[artifact]-[revision].[type]" /> 
    </ivy:publish> 

И если вы используете цепную распознаватель вы должны установить returnFirst="true" так, что решение остановится когда-то был найден на месте.

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