Comment puis-je forcer gradle à recharger les dépendances?
Comment puis-je dire à gradle de recharger les dépendances des dépôts?
16 réponses
en général, vous pouvez rafraîchir les dépendances dans votre cache avec l'option en ligne de commande --rafraîchir les dépendances . Vous pouvez également supprimer les fichiers mis en cache sous ~/.gradle/caches
. Avec le prochain build Gradle tenterait de les télécharger à nouveau.
Quel Est votre cas d'utilisation spécifique? Utilisez-vous des versions de dépendances dynamiques ou des versions de SNAPSHOT?
sur les systèmes Unix, vous pouvez supprimer tous les artéfacts (artéfacts et métadonnées) Gradle a été téléchargé en utilisant:
rm -rf $HOME/.gradle/caches/
si vous utilisez une version récente de Gradle, vous pouvez utiliser l'option --refresh-dependencies.
./gradlew build --refresh-dependencies
vous pouvez vous référer à la Gradle manuel .
l'option --refresh-dependencies indique à Gradle d'Ignorer toutes les entrées cachées pour les modules résolus et les artefacts. une nouvelle résolution sera effectuée contre tous les dépôts configurés, avec des versions dynamiques recalculées, modules mis à jour, et artéfacts téléchargés.
vous pouvez dire à Gradle de re-télécharger certaines dépendances dans le script de compilation en indiquant que la dépendance est 'changing'. Gradle vérifiera alors les mises à jour toutes les 24 heures, mais cela peut être configuré en utilisant la stratégie de résolution DSL. Je trouve qu'il est utile de l'utiliser pour des instantanés ou des compilations nocturnes.
configurations.all {
// Check for updates every build
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
Élargi:
dependencies {
compile group: "group", name: "projectA", version: "1.1-SNAPSHOT", changing: true
}
condensé:
compile('group:projectA:1.1-SNAPSHOT') { changing = true }
j'ai trouvé cette solution à ce fil de discussion du forum .
MAC
./gradlew build --refresh-dependencies
Pour Windows
gradlew build --refresh-dependencies
peut également essayer gradlew assembleDevelopmentDebug --refresh-dependencies
Pour Windows ...afin de faire gradle re-télécharger le spécifique dépendances:
-
supprimer les dépendances que vous souhaitez télécharger à nouveau à partir du répertoire ci-dessous:
C:\Users\[username]\.gradle\caches\modules-2\files-2.1
-
supprimer toutes les métadonnées répertoires au chemin:
C:\Users\[username]\.gradle\caches\modules-2\metadata-*
-
exécuter
gradle build
(ougradlew build
si vous utilisez gradle wrapper) dans le répertoire racine du projet.
note: les numéros dans les chemins de fichier ci-dessus peuvent être différents pour vous.
on peut supprimer le dossier avec des pots en cache.
dans mon cas, sur Mac la bibliothèque a été mise en cache à path:
/Users/MY_NAME/.gradle/caches/modules-2/files-2.1/cached-library-to-remove
j'ai supprimé le dossier de bibliothèque en cache ("cache-bibliothèque-à-supprimer" dans l'exemple ci-dessus), supprimé le dossier de compilation de mon projet et compilé à nouveau. Frais de bibliothèque a été téléchargé puis.
au lieu de supprimer la totalité de votre cache gradle, comme certaines réponses ici le suggèrent, vous pouvez supprimer le cache pour un groupe spécifique ou un identifiant d'artefact. J'ai ajouté la fonction suivante à mon .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
}
Utilisation:
$ deleteGradleCache com.android.support
ensuite, lors de la prochaine compilation ou si vous resyncrez, gradle rechargera les dépendances.
il y a 2 façons de le faire:
- utilisant l'option de ligne de commande pour rafraîchir les dépendances de cashe.
- vous pouvez supprimer la cache locale où les artéfastes sont des caches par Gradle et lancer la construction
utilisant --refresh-dependencies option:
./gradlew build --refresh-dependencies
Brève Explication --l'option refresh-dependencies dit à Gradle d'ignorer tous entrées en cache pour les modules résolus et les artéfacts.
longue explication
- avec –refresh-dependencies’ Gradle va toujours frapper le serveur distant pour vérifier les artéfacts mis à jour: cependant, Gradle évitera de télécharger un fichier où le même fichier existe déjà dans la cache.
- First Gradle va faire une requête principale et vérifier si le serveur déclare le fichier inchangé depuis la dernière durée (si les Termes "content-length" et "last-modified" sont inchangés). Dans ce cas, vous obtiendrez le message: "la ressource mise en cache est à jour (lastModified: {})."
- Next Gradle va déterminer la somme de contrôle à distance si possible (soit à partir de la requête principale, soit en téléchargeant un ‘.sha1 du fichier").. Si cette somme de contrôle correspond à un autre fichier déjà téléchargé (à partir de n'importe quel dépôt), alors Grad le copiera simplement dans le cache, plutôt que de télécharger à nouveau. Dans ce cas, vous aurez la message: ""Trouvés localement les ressources disponibles avec le rattachement de la somme de contrôle: [{}, {}]".
supprimer: Lorsque vous supprimez caches
rm -rf $HOME/.gradle/caches/
vous venez de nettoyer tous les pots de cache et sha1 sommes et Gradle est dans une situation où il n'y a pas d'artefacts sur votre machine et doit tout télécharger. Oui, il fonctionnera à 100% pour la première fois, mais quand un autre SNAPSHOT est libéré et qu'il fait partie de votre arbre de dépendances vous serez confronté de nouveau devant le choix pour rafraîchir ou nettoyer les caches.
ça a marché pour moi. Assurez-vous que Gradle n'est pas défini à offline par le bouton unchecking au fichier>paramètres>Gradle>travail hors ligne.
ajoutez ceci au niveau supérieur de votre construction.gradle, agréable d'avoir au-dessus de dépendances
configurations.all {
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
j'ai fait en sorte que mes dépendances soient écrites comme ceci:
implementation('com.github.juanmendez:ThatDependency:ThatBranch-SNAPSHOT') {
changing = true
}
par la suite, j'ouvre le panneau Gradle dans Android Studio et je clique sur le bouton blue circle arrows. Je peux toujours voir mes mises à jour obtenir une nouvelle copie neuve.
je pense que gradle 2.14.1 résout le problème. La réponse acceptée est correcte, mais il y a un bug dans gradle with –refresh-dependencies. 2.14.1 corrige cela.
voir https://discuss.gradle.org/t/refresh-dependencies-should-use-cachechangingmodulesfor-0s/556
pour la plupart des cas, il suffit de reconstruire le projet DEVRAIT FAIRE l'affaire. Parfois ,vous devez exécuter ./gradlew build --refresh-dependencies
comme plusieurs réponses l'ont déjà mentionné (cela prend beaucoup de temps, selon la quantité de dépendances que vous avez). Cependant, parfois, rien de tout cela ne fonctionnera: la dépendance ne sera tout simplement pas mise à jour. Ensuite, vous pouvez faire ceci:
- supprimer la dépendance de votre fichier gradle
- Exécuter / déboguer votre projet et attendre l'échec (avec
NonExistingClass
la raison) - Hit "projet de construction" et attendre qu'elle se termine avec succès
- Exécuter / déboguer une fois de plus
c'est ridicule et cela semble être de la folie, mais en fait j'utilise cette procédure quotidiennement, simplement parce que la dépendance dont j'ai besoin peut être mise à jour des douzaines de fois et aucune des solutions adéquates n'aurait d'effet.
Vous pouvez le faire comme ceci
https://marschall.github.io/2017/04/17/disabling-gradle-cache.html
pour citer de désactiver le Gradle Build Cache
la cache Gradle build peut être une grande chose lorsque vous construisez régulièrement >grands projets avec Gradle. Toutefois, lorsque la construction de projets open source >n'est qu'occasionnelle, elle peut rapidement prendre de l'ampleur.
pour désactiver le cache de construction Gradle ajouter la ligne suivante à
~/.gradle/gradle.properties
org.gradle.caching=false
vous pouvez nettoyer le cache existant avec
rm -rf $HOME/.gradle/caches/ rm -rf $HOME/.gradle/wrapper/
si vous utilisez eclipse et si vous voulez que force eclipse recharge les dépendances, vous pouvez essayer la commande
gradlew clean cleaneclipse build eclipse --refresh-dependencies
pour ceux qui se demandent où exécuter les commandes gradle:
Open android studio-- > cliquez sur le Terminal (vous le trouverez dans la base de android studio)-- > l'outil de commande s'ouvrira- - > Tapez votre commande (gradlew build --refresh-dependencies)
vous devez le recharger, de sorte que vous pouvez télécharger et remplacer manuellement le fichier corrompu et de nouveau synchroniser votre projet . Accédez à l'emplacement suivant C:\users[nom d'utilisateur].gradle\wrapper\dist\gradle3.3-tous les\55gk2rcmfc6p2dg9u9ohc3hw9\gradle-3.3-tous.zip Ici supprimer Grade3.3allzip et le remplacer en le téléchargeant de nouveau à partir de ce site https://services.gradle.org/distributions / Trouvez le même fichier et téléchargez-le et collez-le à cet endroit Puis de synchroniser votre projet. Espérons qu'il qui fonctionne pour vous aussi.