Как использовать Ivy для локального разрешения - PullRequest
3 голосов
/ 17 января 2012

Я настроил наши проекты Eclipse с помощью Ivy и распознавателя URL-адресов, который ищет артефакты и файлы ivy на веб-сервере здесь, в офисе.Все работает прекрасно.

У меня есть несколько проектов, которые являются зависимостями для других проектов, и я бы хотел настроить конфигурацию Ivy, чтобы эти зависимости могли «публиковаться локально», и чтобы последующие проекты, которые зависят отони могут решить их локально.Это позволит разработчику внести изменения в один проект и увидеть, как эти изменения распространяются в другом проекте, который зависит от него;все без необходимости публиковать в нашем официальном (веб-сервере) хранилище.

Сначала я добавил задачу publish-localally в проект (назовем ее DepProj), которая является зависимостью дляпоследующие проекты:

<target name="publish-locally" depends="clean,dist">
    <ivy:publish resolver="local" overwrite="true" pubrevision="${ivy.new.revision}">  
        <artifacts pattern="${distDir}/[artifact].[ext]" />   
</ivy:publish>
</target>

Затем я изменил файл ivy.xml для одного из нижестоящих проектов DepProj, который называется DownstreamProj:

<dependency org="ourOrg" name="DepProj" rev="latest.integration" conf="*->*"/>

Теперь я задыхаюсьна соединении двух.Мне нужно настроить наш файл ivy.settings, чтобы использовать преобразователь файловой системы.Когда DepProj публикуется локально, вы видите, что сначала он запускает clean, а затем dist.Цель dist создает JAR под DepProj/dist/DepProj.jar.

Я полагаю, мне нужно указать каким-либо образом преобразователь файловой системы на этот каталог dist?Но с другой стороны, DepProj - не единственный проект, с которым я хочу публиковать локально.

У меня есть большинство частей головоломки, у меня просто проблемы с подключением некоторых точек.

Может ли какой-нибудь SOer подтолкнуть меня в правильном направлении?Полезный пример кода всегда очень ценится!Спасибо!

1 Ответ

4 голосов
/ 17 января 2012

Вам определенно нужно определить распознаватель файловой системы и создать свой собственный ivysettings.xml.

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

    <filesystem name="local" checkmodified="true">
        <ivy pattern="${basedir}/../repo/[module](-[branch])/[revision]/[artifact](-[branch])-[revision].[ext]" />
        <artifact pattern="${basedir}/../[module]/[revision]/[artifact](-[branch])-[revision].[ext]" />
    </filesystem>

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

При публикации артефакты будут скопированы туда.

Вы можете установить путь к ivysettings.xml:

<property name="ivy.settings.file" value="${path_to_file}/ivysettings.xml"/>

Это будет прочитано автоматически по телефону:

<ivy:settings />

, который активирует настройки.

Вы также можете создать цепочку для специального модуля, который сначала просматривается в файловой системе, а затем в репозитории:

<resolvers>
    <url name="remote"/>
    <filesystem name="local" checkmodified="true" />

    <chain name="ourOrg" dual="true" latest="time"> 
        <resolver ref="local"/>
        <resolver ref="remote"/>
    </chain>    
</resolvers>

  <modules>
    <!-- resolver für readybank module-->
    <module organisation="ourOrg" resolver="ourOrg"/>
  </modules>

В IvyDe для eclipse есть распознаватель рабочей области, который отлично подходит для любых проектов, открытых в eclipse.

...