Получение нескольких банок из артефактария пакетом

Я пытаюсь понять, как справиться с этой ситуацией, предположим, у меня есть сторонняя библиотека (best-lib), состоящая из трех банок (a.jar, b.jar, c.jar), и я буду загружать эти банки в персональный сервер Artifactory (best-lib) имеет две версии 1.0 и 2.0.

То, что я хотел бы иметь в моем файле ivy.xml, — это одна единственная зависимость для одновременного извлечения всех этих банок, например:

<dependencies>
    <dependency org="mycompany" name="best-lib" rev="1.0" />
</dependencies>

И эта зависимость должна добавить все три jar (a, b и c) версии 1.0.

Вопрос в том:

  1. Это возможно?
  2. Как я могу загрузить три банки в артефакты, чтобы добиться такого поведения?
  3. Можно ли загрузить эти банки сразу?
  4. Также приемлемы искусственные альтернативные решения (например, Nexus или Archivia).

Примечание. Я не собираю best-lib, у меня есть только его jar-файлы, а best-lib — это не библиотека, которую можно загрузить из общедоступного репозитория maven2.

Спасибо.


person Omar Al Kababji    schedule 14.10.2012    source источник
comment
чтобы не указывать слишком много банок, зная, что все они необходимы.   -  person Omar Al Kababji    schedule 14.10.2012


Ответы (1)


При публикации модуля «best-lib» используйте файл ivy.xml, в котором перечислены 3 jar-файла, опубликованные модулем:

<ivy-module version="2.0">
    <info organisation="mycompany" module="best-lib"/>

    <publications>
        <artifact name="a" type="jar"/>
        <artifact name="b" type="jar"/>
        <artifact name="c" type="jar"/>
    </publications>
    ..
    ..

Когда вы создадите зависимость от этого модуля, ivy поймет, что в этом модуле есть 3 jar-файла.

Пример того, как опубликовать модуль ivy, см.:

Обновлять

Если 3 jar уже находятся в вашем репозитории, вы можете опубликовать автономные модули ivy, которые ссылаются на остальные 3 как на зависимости:

<ivy-module version="2.0">
    <info organisation="mycompany" module="best-lib" rev="1.0"/>

    <dependences>
       <dependency org="mycompany" name="a" rev="1.0" />
       <dependency org="mycompany" name="b" rev="1.0" />
       <dependency org="mycompany" name="c" rev="1.0" />
    </dependencies>

Наконец, вам может понадобиться сообщить нам, какой формат использует ваш репозиторий Artifactory... Я предполагал, что это репозиторий плюща. Если это Maven, то концепции те же, но, очевидно, на стороне сервера мы будем говорить о файлах pom.xml, а не о ivy.xml (Ivy поддерживает репозитории Maven).

person Mark O'Connor    schedule 14.10.2012
comment
Спасибо, Марк. Это единственный способ добиться этого? Вы знаете, можно ли добиться того же с помощью артефактов, например, загрузив zip-файл? - person Omar Al Kababji; 14.10.2012
comment
@OmarAlKababji Я не пользователь артефактов, но я считаю, что он поддерживает публикацию репозиториев плюща. Альтернативный подход — опубликовать ваши jar-файлы в репозитории Maven (Artifactory, безусловно, может поддерживать этот формат репозитория). В заключение я бы не рекомендовал zip-файлы... Это превратило бы 3 файла в один артефакт, который нельзя было бы использовать без дополнительного действия по распаковке.... - person Mark O'Connor; 14.10.2012
comment
@OmarAlKababji Вы просто загружаете банки в Artifactory? Разве Artifactory не имеет какой-либо функции загрузки графического интерфейса? - person Mark O'Connor; 14.10.2012
comment
Да, у него есть пользовательский интерфейс для загрузки банок wiki.jfrog. org/confluence/display/RTF/Deploying+Via+the+Web+UI, либо отдельно, где вы указываете идентификатор группы, идентификатор артефакта и версию. Для загрузки сразу нескольких банок предусмотрена загрузка zip файлов. Но я не понял, как можно сгруппировать все jar-файлы в этом zip-архиве таким образом, чтобы вернуть их как единую зависимость. - person Omar Al Kababji; 14.10.2012
comment
@OmarAlKababji Функция загрузки в формате zip кажется удобной. Предполагается, что содержимое zip-файла уже находится в формате репозитория Maven. Сначала выберите формат репозитория. Затем создайте модуль, который либо содержит все 3 артефакта, либо загрузите каждый артефакт как модуль, а затем создайте четвертый модуль, который ссылается на первые 3 как на зависимости. - person Mark O'Connor; 14.10.2012
comment
@OmarAlKababji Самый простой способ сделать это — загрузить каждый файл как модуль Maven в Artifactory. Затем в вашем файле плюща просто создайте 3 зависимости. Ivy полностью понимает макет репозитория Maven, поэтому пусть Artifactory позаботится об этом. Если вы действительно хотите интегрировать ivy и Maven, в следующем сообщении содержится более подробная информация о том, как это работает.... В вашем случае я считаю, что это излишне: stackoverflow.com/questions/5111831/ - person Mark O'Connor; 14.10.2012