Возможно ли использовать 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, что немного ускоряет поиск и уменьшает известную проблему, упомянутую выше

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