Як я можу сказати gradle перезавантажувати залежності із сховищ?
Як я можу сказати gradle перезавантажувати залежності із сховищ?
Відповіді:
Як правило, ви можете оновити залежності у своєму кеші за допомогою параметра командного рядка --refresh-залежності . Ви також можете видалити кешовані файли під ~/.gradle/caches
. При наступній збірці Gradle спробує завантажити їх знову.
Який конкретний випадок використання? Ви використовуєте версії динамічної залежності або версії SNAPSHOT?
У системах Unix можна видалити всі існуючі артефакти (артефакти та метадані), завантажені Gradle, використовуючи:
rm -rf $HOME/.gradle/caches/
find $HOME/.gradle/caches/ -name "*LIBRARY_NAME*" -exec rm -r {} \;
Якщо ви використовуєте останню версію Gradle, ви можете скористатися опцією --refresh-зависимостей.
./gradlew build --refresh-dependencies
ви можете посилатися на посібник Gradle .
Опція --refresh-зависимостей вказує Gradle ігнорувати всі кешовані записи для вирішених модулів та артефактів. Повторне рішення буде виконано для всіх налаштованих сховищ, з перерахунком динамічних версій, оновленими модулями та завантаженими артефактами.
Ви можете сказати Gradle повторно завантажити деякі залежності в сценарії збірки, позначивши залежність як "мінливу". Потім Gradle перевірятиме оновлення кожні 24 години, але це можна налаштувати за допомогою роздільної здатності Stratesy DSL. Мені здається корисним використовувати це для побудови SNAPSHOT або NIGHTLY.
configurations.all {
// Check for updates every build
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
Розширено:
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) у кореневому каталозі проекту.
зауважте: цифри у шляхах до файлів вище можуть бути різними для вас.
Ви можете видалити папку з кешованими банками.
У моєму випадку на Mac бібліотека була кешована на шляху:
/Users/MY_NAME/.gradle/caches/modules-2/files-2.1/cached-library-to-remove
Я видалив кешовану папку бібліотеки ("cached-library-to remove" у наведеному вище прикладі), видалив папку build мого проекту та знову скомпілював. Тоді була завантажена свіжа бібліотека.
Замість того, щоб видаляти весь кеш 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 повторно завантажить залежності.
Є два способи зробити це:
Використання опції --refresh-зависимостей :
./gradlew build --refresh-dependencies
Коротке пояснення - опція refreresh-зависимості говорить Gradle ігнорувати всі кешовані записи для вирішених модулів та артефактів.
Довге пояснення
Використання видалення: Коли ви видаляєте кеші
rm -rf $HOME/.gradle/caches/
Ви просто очистіть усі кешовані банки і ша1 сум, і 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"), після чого виберіть "Refresh залежності".
Це має вирішити вашу проблему.
Mb Я запізнився, однак моє рішення призначене для одного сховища. Я думаю, що видалення ~ / .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.
Для оновлення кешованої версії 'release' єдина можливість - очистити локальний кеш.
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-залежності. 2.14.1 виправляє це.
Дивіться https://discuss.gradle.org/t/refresh-dependitions-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 Build
Кеш побудови Gradle може бути чудовою справою, коли ви регулярно створюєте великі проекти з Gradle. Однак, коли лише зрідка створюються проекти з відкритим кодом>, вони можуть швидко стати великими.
Щоб відключити кеш-пам'ять збірки Gradle, додайте наступний рядок до
~/.gradle/gradle.properties
org.gradle.caching=false
Ви можете очистити наявний кеш
rm -rf $HOME/.gradle/caches/ rm -rf $HOME/.gradle/wrapper/
Якщо ви використовуєте затемнення і якщо ви хочете примусити затемнення повторно завантажувати залежності, ви можете спробувати нижче команду
gradlew clean cleaneclipse build eclipse --refresh-dependencies
Лише ручне видалення конкретної залежності в папці кешу працює ... артефактор, побудований колегою по корпоративній репо.
У моєму випадку ніщо з вищезгаданого не працювало, що я робив:
build.gradle
, коментуючи залежність , пов'язану з недозволеним імпортом я мавТоді мій імпорт знову був належним чином вирішений.
Потрібно повторно завантажити його, щоб ви могли вручну завантажити та замінити пошкоджений файл і знову синхронізувати проект. Перейдіть до цього місця C: \ users [ім'я користувача] .gradle \ wrapper \ dist \ gradle3.3-all \ 55gk2rcmfc6p2dg9u9ohc3hw9 \ gradle-3.3-all.zip Тут видаліть gradle3.3allzip та замініть його, завантаживши знову з цього веб-сайту https: / /services.gradle.org/distributions/ Знайдіть той самий файл та завантажте його та вставте його до цього місця. Потім синхронізуйте проект. Сподіваюсь, що це працює і для вас.