Как заставить 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 повторно загрузить конкретные зависимости:
-
удалите зависимости, которые вы хотите повторно загрузить из каталога ниже:
C:\Users\[username]\.gradle\caches\modules-2\files-2.1
-
удалить метаданных каталоги по пути:
C:\Users\[username]\.gradle\caches\modules-2\metadata-*
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 способа сделать это:
- использование опции командной строки для обновления dependenices cashe.
- вы можете удалить локальный кеш, где 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% в первый раз, но когда будет выпущен другой снимок, и он является частью вашего дерева зависимостей, вы снова столкнетесь с выбором обновить или очистить кэши.
это работает для меня. Убедитесь, что 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
Как уже упоминалось в нескольких ответах (занимает много времени, в зависимости от того, сколько зависимостей у вас есть). Как бы то ни было, иногда ни один из них не будет работать: зависимость просто не будет обновляться. Затем вы можете сделать следующее:
- удалить зависимость из файла gradle
- запустите / отладьте свой проект и дождитесь его сбоя (с помощью
NonExistingClass
причина) - нажмите "построить проект" и дождитесь его успешного завершения
- выполнить / отладить еще раз
это смешно и кажется безумием, но я действительно использую эту процедуру ежедневно, просто потому, что зависимость, в которой я нуждаюсь, может обновляться десятки раз, и ни одно из адекватных решений не будет иметь никакого эффекта.
вы можете сделать это
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/ Найдите тот же файл, загрузите и вставьте его в это место Затем синхронизируйте свой проект. Надеюсь, это сработает для вас тоже.