Как я могу сказать gradle для повторной загрузки зависимостей из репозиториев?
Как я могу сказать gradle для повторной загрузки зависимостей из репозиториев?
Ответы:
Как правило, вы можете обновить зависимости в вашем кэше с помощью параметра командной строки --refresh-dependencies . Вы также можете удалить кэшированные файлы в ~/.gradle/caches
. При следующей сборке Gradle попытается загрузить их снова.
Каков ваш конкретный вариант использования? Используете ли вы динамические версии зависимостей или версии SNAPSHOT?
В системах Unix вы можете удалить все существующие артефакты (артефакты и метаданные), загруженные Gradle с помощью:
rm -rf $HOME/.gradle/caches/
find $HOME/.gradle/caches/ -name "*LIBRARY_NAME*" -exec rm -r {} \;
Если вы используете последнюю версию Gradle, вы можете использовать опцию --refresh-dependencies.
./gradlew build --refresh-dependencies
Вы можете обратиться к руководству Gradle .
Опция --refresh-dependencies указывает Gradle игнорировать все кэшированные записи для разрешенных модулей и артефактов. Новое разрешение будет выполнено для всех настроенных репозиториев с пересчетом динамических версий, обновлением модулей и загрузкой артефактов.
Вы можете указать Gradle повторно загрузить некоторые зависимости в сценарии сборки, пометив зависимость как «изменяющуюся». Gradle будет проверять наличие обновлений каждые 24 часа, но это можно настроить с помощью ResolutionStrategy DSL. Я считаю полезным использовать это для SNAPSHOT или NIGHTLY.
configurations.all {
// Check for updates every build
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
Expanded:
dependencies {
implementation group: "group", name: "projectA", version: "1.1-SNAPSHOT", changing: true
}
Сгущенное:
implementation('group:projectA:1.1-SNAPSHOT') { changing = true }
Я нашел это решение в этой ветке форума .
cacheChangingModulesFor
является ключом, changing: true
является необязательным, потому что подразумевается -SNAPSHOT
, здесь можно использовать сокращение: compile 'group:projectA:1.1-SNAPSHOT'
из-за вышеупомянутого значения. Можно также ограничить resolutionStrategy к одной конфигурации: configurations.compile.resolutionS...
.
compile 'com.burrowsapps:ads:1.0:true'
?
Для MAC
./gradlew build --refresh-dependencies
Для Windows
gradlew build --refresh-dependencies
Можно также попробовать gradlew assembleDevelopmentDebug --refresh-dependencies
gradle wrapper
задачи; Вы даже можете создать оболочку, используя другую оболочку Gradle:gradlew wrapper
Для Windows ... для того, чтобы заставить gradle повторно загружать определенные зависимости:
удалите зависимости, которые вы хотите повторно загрузить из каталога ниже:
C:\Users\%USERNAME%\.gradle\caches\modules-2\files-2.1
удалить все каталоги метаданных по пути:
C:\Users\%USERNAME%\.gradle\caches\modules-2\metadata-*
запустить gradle build
(или, gradlew build
если используется gradle wrapper) в корневом каталоге проекта.
примечание: числа в путях к файлам выше могут отличаться для вас.
Можно удалить папку с кешированными банками.
В моем случае на Mac библиотека кэшировалась по пути:
/Users/MY_NAME/.gradle/caches/modules-2/files-2.1/cached-library-to-remove
Я удалил папку с кэшированной библиотекой («cached-library-to-remove» в приведенном выше примере), удалил папку сборки моего проекта и снова скомпилировал. Свежая библиотека была загружена тогда.
Вместо удаления всего кэша Gradle, как предлагают некоторые ответы здесь, вы можете удалить кэш для определенной группы или идентификатора артефакта. Я добавил следующую функцию в мой .bash_profile
:
deleteGradleCache() {
local id=$1
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 способа сделать это:
Используя параметр --refresh-dependencies :
./gradlew build --refresh-dependencies
Краткое объяснение --refresh-dependencies опция указывает Gradle игнорировать все кэшированные записи для разрешенных модулей и артефактов.
Долгое объяснение
Использование delete: при удалении кешей
rm -rf $HOME/.gradle/caches/
Вы просто очищаете все кэшированные банки и суммы sha1, и Gradle находится в ситуации, когда на вашем компьютере нет артефактов, и он должен загрузить все. Да, он будет работать на 100% в первый раз, но когда будет выпущен другой SNAPSHOT, и он станет частью вашего дерева зависимостей, вам снова придется столкнуться с выбором обновления или очистки кешей.
Это сработало для меня. Убедитесь, что Gradle не переведен в автономный режим, сняв отметку с кнопки «Файл»> «Настройки»> «Gradle»> «Автономная работа».
Добавьте это на верхний уровень вашего build.gradle, приятно иметь вышеуказанные зависимости
configurations.all {
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
Я убедился, что мои зависимости написаны так:
implementation('com.github.juanmendez:ThatDependency:ThatBranch-SNAPSHOT') {
changing = true
}
После этого я открываю панель Gradle в Android Studio и нажимаю кнопку со стрелками синего круга. Я всегда вижу, как мои обновления получают новую свежую копию.
Для Android Studio 3.4.1
Просто откройте вкладку Gradle (может быть расположена справа) и щелкните правой кнопкой мыши на родительском элементе в списке (должен называться «Android»), затем выберите «Обновить зависимости».
Это должно решить вашу проблему.
Я слишком поздно, но мое решение для одного хранилища. Я думаю, что удаление ~ / .gradle / * излишне. Проблема, с которой я столкнулся, заключалась в том, что я удалял каталог, в котором находились источники, а Gradle получал другую версию, а не от Nexus. Чтобы избежать этого, я запускаю следующее:
~/.gradle$ find . -type d -name 'group.plugins.awssdk'
./caches/modules-2/files-2.1/group.plugins.awssdk
./caches/modules-2/metadata-2.23/descriptors/group.plugins.awssdk
~/.gradle$ rm -r ./caches/modules-2/files-2.1/group.plugins.awssdk ./caches/modules-2/metadata-2.23/descriptors/group.plugins.awssdk
После этого Gradle перетаскивает файлы из Nexus.
Чтобы обновить кешированную «релизную» версию, единственный вариант - очистить локальный кеш.
rm -rf $HOME/.gradle/caches/
Чтобы обновить кэшированную версию «снимка», вы можете:
./gradlew build --refresh-dependencies
Удаление всех кешей заставляет снова загрузить все зависимости. так что это заняло так много времени и это скучно ждать снова, чтобы снова загрузить все зависимости.
Как только я смогу решить эту проблему ниже.
Просто удалите группы, которые необходимо обновить.
Пример: если мы хотим обновить группу com.user.test
rm -fr ~/.gradle/caches/modules-2/files-2.1/com.user.test/
затем удалите зависимость из build.gradle и повторно добавьте ее. тогда он обновит зависимости, что мы хотим.
Я думаю, что Gradle 2.14.1 решает проблему. Принятый ответ правильный, но в gradle есть ошибка с –refresh-dependencies. 2.14.1 исправляет это.
См. Https://discuss.gradle.org/t/refresh-dependencies-should-use-cachechangingmodulesfor-0s/556.
удалить этот каталог:
C:\Users\[username]\.gradle
В большинстве случаев достаточно просто перестроить проект. Иногда вам нужно запустить, так ./gradlew build --refresh-dependencies
как несколько ответов уже упоминалось (это занимает много времени, в зависимости от того, сколько у вас зависимостей). Однако иногда ни один из них не будет работать: зависимость не будет обновлена. Затем вы можете сделать это:
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 перезагружал зависимости, попробуйте команду ниже
gradlew clean cleaneclipse build eclipse --refresh-dependencies
Работает только ручное удаление определенной зависимости в папке кеша ... артефакт, созданный коллегой по корпоративному репо.
В моем случае ничего из вышеперечисленного не сработало, я сделал следующее:
build.gradle
, комментируя зависимости, связанные с неразрешенным импортомТогда мой импорт снова был правильно разрешен.
Вам необходимо повторно загрузить его, чтобы вы могли вручную загрузить и заменить поврежденный файл и снова синхронизировать ваш проект. Перейдите по этому адресу C: \ users [username] .gradle \ wrapper \ dist \ gradle3.3-all \ 55gk2rcmfc6p2dg9u9ohc3hw9 \ gradle-3.3-all.zip Здесь удалите gradle3.3allzip и замените его, загрузив снова с этого сайта https: / /services.gradle.org/distributions/ Найдите тот же файл, загрузите и вставьте его в это место. Затем синхронизируйте ваш проект. Надеюсь, это работает и для вас.