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 для всех своих проектов, и все контролируется централизованно.

Другие вопросы по тегам