Как заставить gradle повторно загружать зависимости?

Как я могу сказать gradle для перезагрузки зависимостей из репозиториев?

16 ответов


Как правило, вы можете обновить зависимости в кэше с помощью опции командной строки --refresh-зависимости. Вы также можете удалить кэшированные файлы в разделе ~/.gradle/caches. Со следующей сборкой Gradle попытается загрузить их снова.

каков ваш конкретный случай использования? Вы используете динамический версий зависимостей или версии?


в системах Unix вы можете удалить все существующие артефакты (артефакты и метаданные), загруженные Gradle использование:

rm -rf $HOME/.gradle/caches/

Если вы используете последнюю версию Gradle, вы можете использовать опцию --refresh-dependencies.

./gradlew build --refresh-dependencies

вы можете обратиться к ш инструкция.

параметр --refresh-dependencies указывает Gradle игнорировать все кэшированные записи для разрешенных модулей и артефактов. новое решение будет выполнено для всех настроенных репозиториев с пересчетом динамических версий, обновлением модулей и загрузкой артефактов.


вы можете сказать Gradle повторно загрузить некоторые зависимости в скрипте сборки, пометив зависимость как "изменение". Затем Gradle будет проверять наличие обновлений каждые 24 часа, но это можно настроить с помощью DSL resolutionStrategy. Я считаю полезным использовать это для моментальных снимков или ночных сборок.

configurations.all {
    // Check for updates every build
    resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}

расширенный:

dependencies {
    compile group: "group", name: "projectA", version: "1.1-SNAPSHOT", changing: true
}

сгущенное:

compile('group:projectA:1.1-SNAPSHOT') { changing = true }

Я нашел это решение на этом форум thread.


для MAC

./gradlew build --refresh-dependencies

Для Windows

gradlew build --refresh-dependencies

также можно попробовать gradlew assembleDevelopmentDebug --refresh-dependencies


Для Windows...для того, чтобы сделать gradle повторно загрузить конкретные зависимости:

  1. удалите зависимости, которые вы хотите повторно загрузить из каталога ниже:

    C:\Users\[username]\.gradle\caches\modules-2\files-2.1
    
  2. удалить метаданных каталоги по пути:

    C:\Users\[username]\.gradle\caches\modules-2\metadata-*
    
  3. run gradle build (или gradlew build при использовании оболочки gradle) в корне проекта справочник.

Примечание: номера в пути к файлам выше могут быть разными для вас.


можно удалить папку с кэшированными банки.

в моем случае, на Mac библиотека была кэширована по пути:

/Users/MY_NAME/.gradle/caches/modules-2/files-2.1/cached-library-to-remove

Я удалил папку кэшированной библиотеки ("кэшированная библиотека для удаления" в приведенном выше примере), удалил папку сборки моего проекта и скомпилировал снова. Тогда была загружена свежая библиотека.


вместо удаления всего кэша gradle, как предлагают некоторые ответы, вы можете удалить кэш для определенной группы или идентификатора артефакта. Я добавил следующую функцию в my .bash_profile:

deleteGradleCache() {
  local id=
  if [ -z "$id" ]; then
    echo "Please provide an group or artifact id to delete"
    return 1
  fi
  find ~/.gradle/caches/ -type d -name "$id" -prune -exec rm -rf "{}" \; -print
}

использование:

$ deleteGradleCache com.android.support

затем, при следующей сборке или при повторной синхронизации, gradle будет повторно загружать зависимости.


есть 2 способа сделать это:

  1. использование опции командной строки для обновления dependenices cashe.
  2. вы можете удалить локальный кеш, где artefasts являются кэшами Gradle и trigger build

используя --refresh-зависимости:

./gradlew build --refresh-dependencies

краткое описание --refresh-dependencies опция говорит Gradle игнорировать все кэшированные записи для разрешенных модулей и артефактов.

долго explanantion

  • WIth –refresh-dependencies’ Gradle всегда будет попадать на удаленный сервер, чтобы проверить наличие обновленных артефактов: однако Gradle будет избегать загрузки файла, где тот же файл уже существует в кэше.
    • First Gradle сделает запрос HEAD и проверит, сообщает ли сервер файл как неизмененный с прошлого раза (если "content-length" и "last-modified" не изменились). В этом случае вы получите сообщение: "кэшированный ресурс обновлен (lastModified: {})."
    • Next Gradle определит удаленную контрольную сумму, если это возможно (либо из запроса HEAD, либо путем загрузки a ‘.файла SHA1’).. Если эта контрольная сумма соответствует другому файлу, уже загруженному (из любого репозитория), то Gradle просто скопирует файл в кэш, вместо повторной загрузки. В этом случае вы получите сообщение: "" Найден локально доступный ресурс с соответствующей контрольной суммой: [{}, {}]".

использование delete: При удалении кэшей

rm -rf $HOME/.gradle/caches/

вы просто очищаете все кэшированные банки и суммы sha1, и Gradle находится в ситуации, когда на вашем компьютере нет артефактов и нужно загрузить все. Да, он будет работать 100% в первый раз, но когда будет выпущен другой снимок, и он является частью вашего дерева зависимостей, вы снова столкнетесь с выбором обновить или очистить кэши.


удалить эту директорию:

C:\Users\[username]\.gradle

это работает для меня. Убедитесь, что Gradle не установлен в автономном режиме, сняв флажок в меню Файл>Настройки>Gradle>Автономная работа.

добавьте это на верхний уровень сборки.gradle, приятно иметь выше зависимостей

configurations.all {
    resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}

я убедился, что мои зависимости написаны следующим образом:

implementation('com.github.juanmendez:ThatDependency:ThatBranch-SNAPSHOT') {
    changing = true
}

после этого я открываю панель Gradle в Android Studio и нажимаю кнопку со стрелками синего круга. Я всегда вижу, как мои обновления получают новую свежую копию.


Я думаю, что gradle 2.14.1 исправляет проблему. Принятый ответ правильный,но есть ошибка в gradle с зависимостями-refresh. 2.14.1 исправления.

см https://discuss.gradle.org/t/refresh-dependencies-should-use-cachechangingmodulesfor-0s/556


в большинстве случаев, просто перестроить проект должен сделать трюк. Иногда приходится бежать ./gradlew build --refresh-dependencies Как уже упоминалось в нескольких ответах (занимает много времени, в зависимости от того, сколько зависимостей у вас есть). Как бы то ни было, иногда ни один из них не будет работать: зависимость просто не будет обновляться. Затем вы можете сделать следующее:

  1. удалить зависимость из файла gradle
  2. запустите / отладьте свой проект и дождитесь его сбоя (с помощью NonExistingClass причина)
  3. нажмите "построить проект" и дождитесь его успешного завершения
  4. выполнить / отладить еще раз

это смешно и кажется безумием, но я действительно использую эту процедуру ежедневно, просто потому, что зависимость, в которой я нуждаюсь, может обновляться десятки раз, и ни одно из адекватных решений не будет иметь никакого эффекта.


вы можете сделать это

https://marschall.github.io/2017/04/17/disabling-gradle-cache.html

цитата из отключение кэша сборки Gradle

кэш сборки Gradle может быть отличной вещью, когда вы регулярно строите > большие проекты с Gradle. Однако, когда только изредка строятся проекты с открытым исходным кодом ,он может быстро стать большим.

чтобы отключить кэш сборки Gradle, добавьте следующую строку в ~/.gradle/gradle.properties

org.gradle.caching=false

вы можете очистить существующие кэш с

rm -rf $HOME/.gradle/caches/
rm -rf $HOME/.gradle/wrapper/

Если вы используете eclipse и хотите заставить eclipse повторно загружать зависимости, вы можете попробовать ниже command

gradlew clean cleaneclipse build eclipse --refresh-dependencies

для тех, кому интересно, где запускать команды gradle:

открыть Android studio-- > нажмите на терминал (вы найдете его в базе android studio)-->откроется инструмент команды--->введите команду(gradlew build --refresh-dependencies)


вам нужно перезагрузить его, чтобы вы могли вручную загрузить и заменить поврежденный файл и снова синхронизировать свой проект . Перейти в это место C:\users[имя пользователя].gradle\wrapper\dist\gradle3.3-все\55gk2rcmfc6p2dg9u9ohc3hw9 \ gradle-3.3-все.застежка-молния Здесь удалить gradle3.3allzip и заменить его, загрузив снова с этого сайта https://services.gradle.org/distributions/ Найдите тот же файл, загрузите и вставьте его в это место Затем синхронизируйте свой проект. Надеюсь, это сработает для вас тоже.