У меня есть 3 проекта следующей структуры:Apache Айви. Переходная зависимости не извлекаться
App
| |
...
| |
| +--lib
| | |
| | +--...
| |
| +--dist
|
Lib
| |
...
| |
| +--lib
| | |
| | +--sublib-1.0.jar
| |
| +--dist
| |
| +--lib-1.0.jar
|
SubLib
|
...
|
+--dist
|
+--sublib-1.0.jar
Которые имеют следующее соотношение:
App <-- Lib <-- SubLib
Я использую апачский плющ для получения зависимостей для обоих App
и Lib
. Зависимости описываются следующим образом: ivy.xml
из Lib
:
<ivy-module version = "2.0">
<info organisation = "com.test.lib" module = "lib"/>
<dependencies>
<dependency org = "com.test.sub.lib" name = "sublib" rev = "1.0" conf = "compile->default"/>
</dependencies>
</ivy-module>
ivy.xml
из App
:
<ivy-module version = "2.0">
<info organisation = "com.test.app" module = "App"/>
<dependencies>
<dependency org = "com.test.lib" name = "lib" rev = "1.0" conf = "compile->default"/>
</dependencies>
</ivy-module>
ivysettings.xml
:
<ivysettings>
<settings defaultResolver = "local"/>
<resolvers>
<filesystem name = "local">
<artifact pattern = "${ivy.settings.dir}/SubLib/dist/[artifact]-[revision].[ext]"/>
<artifact pattern = "${ivy.settings.dir}/Lib/dist/[artifact]-[revision].[ext]"/>
</filesystem>
</resolvers>
<modules>
<module organisation = "com.test.ivytest" resolver = "local"/>
</modules>
</ivysettings>
Ожидаемый результат: после выполнения ivy:retrieve
, б и др sublib-1.0.jar
lib-1.0.jar
присутствовать в App/lib
Фактический результат: только lib-1.0.jar
присутствует в App/lib
. Сгенерированный плющ-отчет для App
не содержит упоминания о sublib
, являющемся зависимым от lib
. Ничего подобного не существует в журналах муравьев + плющ во время сборки.
Примечание:lib-1.0.jar
не строится как жирная банка.
Что мне не хватает в этой конфигурации?
Update
Я сделал некоторые мысли, и единственный вывод, который я пришел с в том, что эта проблема действительно расконфигурация. Судя по тому, что транзитивная зависимость не извлекается, мы можем положительно сказать, что плющ не имеет никакой информации, когда она разрешает lib
. И это имеет смысл, потому что папка Lib/dist
может быть где угодно в файловой системе. Единственный способ получить информацию о транзитивной зависимости будет иметь ivy.xml
где-то рядом с этой банкой. Который не. Это немного подтверждается сообщением в журналах [ivy:retrieve] local: no ivy file found for com.test.lib#lib;1.0: using default data
. Единственный способ сохранения информации - данные кэша в %user%/.ivy/cache
. Там сгенерированные файлы [org]-[artifact]-[conf].xml
содержат информацию о зависимостях. Поэтому я предполагаю, что для правильной работы мне придется использовать кеш на уровне разрешения приложения.
Это имеет смысл, или я снова не прав?
ivy: разрешить нужно вызвать до извлечения. Какие ошибки вы получаете? Есть что-то вроде «конфигурации отсутствует»? – cantSleepNow
От того, что я смог понять, это не обязательно. Я вижу для разделов '[ivy: retrieve]' в журналах, что он выполняет решение. Я не получаю ошибок, это просто транзитивные jar-зависимости. – HighPredator
Хорошо (читая обновленную часть также), возможно, очистите кэш плюща и запустите его снова. Также добавьте к вопросу скрипт (ы) муравей, который вы используете для публикации 'lib' и' sublib'. – cantSleepNow