Ivy Dependency (тянуть в каталог файлов)
Экстремальный отредактировать вопрос, чтобы иметь больше смысла:
Давайте предположим, что мне нужно использовать локальную версию httpclient, а не ту, которую я могу просто извлечь из онлайн-репо (по причинам подписания). То, как я хочу справиться с этим, выглядит так...
ivy.xml
<dependencies>
...Other dependencies here
<dependency org="com.apache" name="httpclient" rev="4.2.2" conf="compile->default" ext="jar" />
</dependencies>
ivysettings.xml
<settings defaultResolver="central"/>
<resolvers>
<url name="repo">
<ivy pattern="http://myServer:8080/Repo/[organisation]/[artifact]/[revision]/ivy.xml" />
<artifact pattern="http://myServer:8080/Repo/[organisation]/[artifact]/[revision]/[artifact].[ext]"/>
</url>
<url name="httpclient">
<artifact pattern="http://myServer:8080/Repo/com.apache/httpclient/4.2.2/[artifact].[ext]"/>
</url>
<modules>
<module organisation="com.apache" resolver="repo" />
<module organisation="com.httpclient" resolver="httpclient" />
</modules>
Теперь я надеюсь (и мне не очень повезло), чтобы преобразователь com.apache искал myServer:8080/Repo/com.apache/httpclient/4.2.2/ivy.xml и читал его, вот содержимое этого файла:
ivy.xml (в каталоге myServer:8080/repo/...)
<dependency org="com.httpclient" name="commons-codec" rev="1.6" />
<dependency org="com.httpclient" name="commons-logging" rev="1.1.1" />
<dependency org="com.httpclient" name="fluent-hc" rev="4.2.2" />
<dependency org="com.httpclient" name="httpclient" rev="4.2.2" />
<dependency org="com.httpclient" name="httpclient-cache" rev="4.2.2" />
<dependency org="com.httpclient" name="httpcore" rev="4.2.2" />
<dependency org="com.httpclient" name="httpmime" rev="4.2.2"/>
Причина, по которой нужно читать второй XML-файл, а не включать разметку в мой первый файл, довольно очевидна, если учесть, сколько LOC может добавить к чему-то, что мы часто используем. Это также делает все будущее включает в себя также легче.
Прямо сейчас ошибка, которую я получаю:
Не удается разрешить некоторые проекты Невозможно разрешить зависимости com.myCompany#myProgramt; рабочая @CompName неразрешенная зависимость: com.apache#httpclient;4.2.2: не найдено
Спасибо за вашу помощь в этом вопросе.
3 ответа
Айви ожидает найти все зависимости данного артефакта в одном и том же преобразователе. Итак, он находит артефакты для com.apache
в вашем repo
распознаватель и ожидает найти com.httpclient
там тоже.
Плющ тоже прокатит через тебя <ivy pattern.../>
а также <artifact pattern.../>
заявления в порядке в пределах одной декларации Вы можете использовать это в своих интересах, чтобы создать единый распознаватель, который будет обращаться к обоим репозиториям в нужном вам порядке:
<url name="amalgamation">
<ivy pattern="http://myServer:8080/Repo/[organisation]/[artifact]/[revision]/ivy.xml" />
<artifact pattern="http://myServer:8080/Repo/[organisation]/[artifact]/[revision]/[artifact].[ext]"/>
<artifact pattern="http://myServer:8080/Repo/com.apache/httpclient/4.2.2/[artifact].[ext]"/>
</url>
Когда вы настраиваете свою сборку для использования следующего решателя
<ibiblio name="central" m2compatible="true"/>
Вы говорите Айви, чтобы загрузить его зависимость от Maven Central
Какова ваша цель здесь? Чтобы создать местное хранилище плюща, которое функционально работает как Maven Central? В этом случае самым простым решением было бы установить менеджер репозитория Maven, такой как: Nexus, Artifactory или Archiva. Менеджер репозитория maven может действовать как интеллектуальный кеш и прокси-банки, хранящиеся в репозитории Central Maven.
Настроить вашу сборку для использования локального репозитория Maven очень просто:
<ibiblio name="central" m2compatible="true" root="http://hostname:portnum/MavenRepo/>
Какой сервер вы используете для своего удаленного JAR-хранилища?
Как Nexus, так и Artifactory могут быть настроены на извлечение банок, хранящихся локально, на себя, прежде чем отправлять банки из удаленного хранилища. Таким образом, вам не нужно ivysettings.xml
, Вместо этого вы просто загружаете свои любимые версии банок на Artifactory/Nexus. И то, и другое бесплатно, с открытым исходным кодом, загрузки. С Artifactory / Nexus сделать намного проще, чем с настройками Ivy.
Кстати, у меня есть проект Ivy в Github, который вы можете посмотреть. Вы просто присоединяете этот проект к своему проекту Ant, и в нем все автоматически настраивается для Ivy. Таким образом, весь сайт может использовать Ivy для всех своих проектов, и все контролируется централизованно.