Я немного пользуюсь Ivy, но мне, похоже, еще есть чему поучиться.
У меня есть два проекта. Один - это веб-приложение, а другой - библиотека, от которой зависит веб-приложение. Установлено, что проект библиотеки компилируется в файл jar и публикуется с использованием Ivy в каталог внутри проекта. В файле сборки веб-приложения у меня есть цель ant, которая вызывает задачу Ant Ivy Resolution.
Мне бы хотелось, чтобы веб-приложение использовало режим динамического разрешения во время разработки (на локальных компьютерах разработчика) и режим разрешения по умолчанию для тестовых и производственных сборок. Ранее я добавлял метку времени в файл архива библиотеки, чтобы Айви заметила изменения в файле, когда веб-приложение попыталось разрешить свою зависимость от него. В Eclipse это громоздко, потому что в веб-приложении проект должен был обновляться, а путь сборки корректировался при каждой публикации новой библиотеки библиотеки. Я полагаю, что для публикации jar-файла с аналогичным именем каждый раз требуется только обновление проекта разработчиками.
Проблема в том, что веб-приложение не может получить динамический файл JAR.
Вывод, который я получаю, выглядит примерно так:
resolve:
[ivy:configure] :: Ivy 2.1.0 - 20090925235825 :: http://ant.apache.org/ivy/ ::
[ivy:configure] :: loading settings :: file = /Users/richard/workspace/webapp/web/WEB-INF/config/ivy/ivysettings.xml
[ivy:resolve] :: resolving dependencies :: com.webapp#webapp;working@hoth-3.local
[ivy:resolve] confs: [default]
[ivy:resolve] found com.webapp#library;latest.integration in local
[ivy:resolve] :: resolution report :: resolve 142ms :: artifacts dl 0ms
---------------------------------------------------------------------
| | modules || artifacts |
| conf | number| search|dwnlded|evicted|| number|dwnlded|
---------------------------------------------------------------------
| default | 1 | 0 | 0 | 0 || 0 | 0 |
---------------------------------------------------------------------
[ivy:resolve]
[ivy:resolve] :: problems summary ::
[ivy:resolve] :::: WARNINGS
[ivy:resolve] ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:resolve] :: UNRESOLVED DEPENDENCIES ::
[ivy:resolve] ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:resolve] :: com.webapp#library;latest.integration: impossible to resolve dynamic revision
[ivy:resolve] ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:resolve] :::: ERRORS
[ivy:resolve] impossible to resolve dynamic revision for com.webapp#library;latest.integration: check your configuration and make sure revision is part of your pattern
[ivy:resolve]
[ivy:resolve] :: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS
BUILD FAILED
/Users/richard/workspace/webapp/build.xml:71: impossible to resolve dependencies:
resolve failed - see output for details
Цель разрешения веб-приложения выглядит следующим образом:
<target name="resolve" depends="load-ivy">
<ivy:configure file="${ivy.dir}/ivysettings.xml" />
<ivy:resolve
file="${ivy.dir}/ivy.xml"
resolveMode="${ivy.resolve.mode}"/>
<ivy:retrieve pattern="${lib.dir}/[artifact]-[revision].[ext]" type="jar" sync="true" />
</target>
В этом случае ivy.resolve.mode имеет значение «dynamic» (без кавычек).
Файл Ivy веб-приложения прост. Это выглядит так:
<ivy-module version="2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
<info organisation="com.webapp" module="webapp"/>
<dependencies>
<dependency name="library" rev="${ivy.revision.default}" revConstraint="${ivy.revision.dynamic}" />
</dependencies>
</ivy-module>
Во время разработки ivy.revision.dynamic имеет значение «latest.integration». В то время как во время производства или тестирования ivy.revision.default имеет значение 1.0.
Есть идеи? Пожалуйста, дайте мне знать, если мне нужно предоставить больше информации.
Спасибо!