2013-04-03 6 views
3

Я читал на Gradle и его функции поддержки репозитория. Документы указывают, что он поддерживает репозитории Ivy или Maven. Последствия этого мне не совсем понятны.Как Gradle интегрируется с общим хранилищем Ivy или Maven?

В случае ретрансляции Maven, я думаю, что мое понимание более полно. При создании локальный репозиторий, такой как Nexus или Artifactory, будет кэшировать необходимые формы общественных зависимостей MavenCentral. Для публикации Gradle будет генерировать POM.xml для проекта, и вы можете публиковать частные артефакты обратно в локальный репозиторий. Правильно ли я понимаю? Я хочу иметь контроль над используемыми общественными зависимостями, а также исправлять ошибки в публичных MavenCentral POM.

Для Айви я немного более смущен. Для одного, , как выглядит общий репозиторий Ivy? Является ли это просто деревом удаленных каталогов, размещенным поверх SSH, SFTP, HTTP и т. Д.? Это работает в смешанной среде Windows/Unix? Как Gradle перемещает общественные зависимости и создает артефакты в общий репозиторий Ivy? Может Дженкинс также выполнить этот шаг, как? Необходимы ли дополнительные шаги сборки, когда определяются новые общественные зависимости, и их нужно переместить в общий репозиторий Ivy, или это делается без проблем?

И, наконец, при условии, что функции двух моделей в основном одинаковы. Каково решение для поддержки сборочной машины Jenkins?

+0

Аналогичный вопрос: http://stackoverflow.com/questions/14447475/create-a-private-remote-ivy-repository – cmcginty

ответ

6

Ваше понимание поддержки Maven в Gradle является правильным. У вас есть полный контроль над зависимостями и откуда они взяты (у Gradle нет каких-либо репозиториев с жестким кодированием, поэтому вы можете использовать Bintray вместо Maven Central, например, меньше ошибок для исправления).

Управление зависимостью Ivy аналогично. У Ivy есть собственный макет (supported in Artifactory, but not in Nexusсм. «Поддержка репозитория»), и в сети имеется небольшое количество публичных репозиториев Ivy (например, Ivy RoundUp). Поскольку Ivy хорошо работает с репозиториями Maven, большинство пользователей Ivy используют Maven Central и/или Bintray.

Основное отличие между Ivy и Maven заключается не в формате репозитория, а в формате метаданных. Ivy использует ivy.xml (хотя имя не обязательно) вместо pom.xml, а схема xml отличается. Gradle поддерживает оба формата и может считывать транзитивные зависимости как из pom.xml, так и из ivy.xml и может генерировать метаданные для вашего проекта и разворачивать их в репозитории в обоих форматах.

+0

Очевидно, что «Полный доступ» означает, что вам нужно написать свой собственный плагин, чтобы исключить транзиты? Я не думаю, что у Gradle есть где-то рядом с гранулярностью контроля, чтобы назвать ее «полной». Если бы это было так, я мог бы легко исключить транзитивность, просто исключив исключение для этого элемента, даже если он похоронен на 4 или 5 глубины. ... и тогда есть спецификации. ИМХО никакой поддержки BOM означает недостаточную поддержку Maven в целом, поскольку maven, похоже, сильно склоняется в этом направлении. – user447607

+0

«Полный контроль» означает, что Gradle будет использовать только репозитории, объявленные в вашем файле gradle. Исключая транзитивные зависимости, вы можете сделать это [легко] (https://docs.gradle.org/current/userguide/dependency_management.html#sub:exclude_transitive_dependencies). Re BOM, [здесь вы идете] (https://github.com/nebula-plugins/nebula-dependency-recommender-plugin). – JBaruch

+0

Вы можете легко исключить транзитивность, если вы этого не хотите, нигде. Конкретная проблема, с которой мы столкнулись, заключалась в том, что функция автоматического обновления всегда имела место.Хотя я согласен, что это правильный путь, когда вы переносите массивный проект (недели для сортировки зависимостей), это вызывает проблемы, когда вы пытаетесь убедиться, что файлы * .war выходят одинаково между Maven и Gradle. Они могут быть разными ПОСЛЕ перехода, но не во время. В этом случае вы заканчиваете «очистку лука», чтобы попытаться получить исключение из этой конкретной зависимости. – user447607