Возможно ли использовать Graven-репозиторий с более высоким приоритетом, чем у jcenter?
Gradle может установить несколько репозиториев, например, maven и jcenter. Но я понял, что gradle всегда сначала использует jcenter, даже если я ставлю maven перед jcenter (как показано ниже). Можно ли сделать maven (локальное репо и быстрее) более высоким приоритетом?
## in file build.gradle
allprojects {
repositories {
maven { url "http://nexus.mucompany.com/nexus/service/local/repositories/releases/content/" }
jcenter()
}
1 ответ
Я хотел бы попросить об этом в качестве комментария, но у меня еще недостаточно представителей:-/
Можете ли вы опубликовать вывод из gradle --debug
что заставляет вас думать, что это решение от jcenter в предпочтении?
Документы Gradle содержат следующее:
Проект может иметь несколько репозиториев. Gradle будет искать зависимости в каждом хранилище в указанном порядке, останавливаясь на первом хранилище, которое содержит запрошенный модуль.
Быстрое подтверждение локально показывает, что заказ выполняется между пользовательскими репозиториями Maven и jcenter()
Помимо того факта, что, по крайней мере, в более новых версиях gradle порядок имеет значение:
Это даже более важно, если учесть, что порядок репозиториев имеет значение.
…
✨ Порядок объявления определяет, как Gradle будет проверять зависимости во время выполнения. Если Gradle находит дескриптор модуля в определенном репозитории, он попытается загрузить все артефакты для этого модуля из того же репозитория. Вы можете узнать больше о внутренней работе механизма разрешения Gradle.
источник: gradle 5.4.1 Объявление нескольких репозиториев
или это ошибка в вашей конкретной версии Gradle - мой ответ может прийти "немного поздно" в тот день 2k19, поскольку ваш вопрос был от '15;D
(по крайней мере, в Gradle 3.5 он был определен аналогично
У проекта может быть несколько репозиториев. Gradle будет искать зависимости в каждом репозитории в указанном порядке, останавливаясь в первом репозитории, содержащем запрошенный модуль.
источник: gradle 3.5 Управление зависимостями для проектов Java)
распространенная проблема заключается в том, что поврежден локальный кеш хранилища И / ИЛИ с более высоким приоритетом! Довольно часто искусственный прокси jcenter содержит объявления POM, но не jar-файлы. Затем вам нужно очистить объект. Аналогично локальным репозиториям.
вы можете попытаться игнорировать локальные кеши, запустив gradle с --refresh-dependencies
и лучший случай -i
ведение журнала включено, чтобы видеть, куда направляются запросы и каковы результаты.
взгляните на Как я могу заставить gradle повторно загружать зависимости?
Второй вариант: начиная с Gradle 5.1 вы всегда можете объявлять фильтры
см. Gradle 5.4.1 Объявление фильтра репозитория
для меня я игнорирую любые пакеты com.android из jcenter, что немного ускоряет поиск и уменьшает известную проблему, упомянутую выше