Comment puis-je dire à Gradle de télécharger à nouveau les dépendances à partir de référentiels?
En règle générale, vous pouvez actualiser les dépendances dans votre cache avec l'option de ligne de commande --refresh-dependencies . Vous pouvez également supprimer les fichiers mis en cache sous ~/.gradle/caches
. Avec la prochaine construction, Gradle tenterait de les télécharger à nouveau.
Quel est votre cas d'utilisation spécifique? Utilisez-vous des versions de dépendance dynamique ou des versions de SNAPSHOT?
Sur les systèmes Unix, vous pouvez supprimer tous les artefacts existants (artefacts et métadonnées) que Gradle a téléchargés à l'aide de:
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 au manuel Gradle .
L'option --refresh-dependencies indique à Gradle d'ignorer toutes les entrées en cache des modules et des artefacts résolus. Une nouvelle résolution sera effectuée sur tous les référentiels configurés, avec les versions dynamiques recalculées, les modules actualisés et les artefacts téléchargés.
Vous pouvez demander à Gradle de télécharger à nouveau certaines dépendances dans le script de construction en signalant que la dépendance est «changeante». Gradle vérifiera ensuite les mises à jour toutes les 24 heures, mais cela peut être configuré à l'aide du DSL resolutionStrategy. Je trouve utile d’utiliser ceci pour des constructions SNAPSHOT ou NIGHTLY.
configurations.all {
// Check for updates every build
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
Étendu:
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 sujet forum .
Pour Mac
./gradlew build --refresh-dependencies
Pour les fenêtres
gradlew build --refresh-dependencies
Peut aussi essayer gradlew assembleDevelopmentDebug --refresh-dependencies
Pour Windows ... afin de rendre les dépendances spécifiques de nouvelles versions:
supprimez les dépendances que vous souhaitez télécharger à nouveau dans le répertoire ci-dessous:
C:\Users\[username]\.gradle\caches\modules-2\files-2.1
supprimez tous les répertoires metadata dans le chemin:
C:\Users\[username]\.gradle\caches\modules-2\metadata-*
lancez gradle build
(ou gradlew build
si vous utilisez Gradpper wrapper) dans le répertoire racine du projet.
note: les nombres dans les chemins de fichiers ci-dessus peuvent être différents pour vous.
On peut supprimer un dossier avec des jars en cache.
Dans mon cas, sur Mac la bibliothèque a été mise en cache sur le chemin:
/Users/MY_NAME/.gradle/caches/modules-2/files-2.1/cached-library-to-remove
J'ai supprimé le dossier de la bibliothèque en cache ("cached-library-to-remove" dans l'exemple ci-dessus), supprimé le dossier de construction de mon projet et recompilé. Une nouvelle bibliothèque a été téléchargée à l’époque.
Au lieu de supprimer l'intégralité de votre cache Gradle, comme certaines réponses le suggèrent, vous pouvez supprimer le cache d'un groupe ou d'un identifiant d'artefact spécifique. J'ai ajouté la fonction suivante à mon .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
}
Usage:
$ deleteGradleCache com.Android.support
Ensuite, lors de la prochaine construction ou si vous le resynchronisez, gradle téléchargera à nouveau des dépendances.
Cela a fonctionné pour moi . Assurez-vous que Gradle n'est pas mis hors ligne en décochant le bouton Fichier> Paramètres> Gradient> Travail hors connexion.
Ajoutez ceci au plus haut niveau de votre build.gradle, c'est bien d'avoir des dépendances dessus
configurations.all {
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
Je me suis assuré que mes dépendances sont écrites comme ceci:
implementation('com.github.juanmendez:ThatDependency:ThatBranch-SNAPSHOT') {
changing = true
}
Ensuite, j'ouvre le panneau Gradle dans Android Studio et cliquez sur le bouton de flèche bleue. Je peux toujours voir mes mises à jour recevoir une nouvelle copie.
Il y a 2 façons de faire ça:
Utilisation de l’option --refresh-dependencies:
./gradlew build --refresh-dependencies
Explication courte L'option --refresh-dependencies indique à Gradle d'ignorer toutes les entrées en cache des modules et des artefacts résolus.
Longue explication
Utilisation de delete: Lorsque vous supprimez des caches
rm -rf $HOME/.gradle/caches/
Vous venez de nettoyer tous les bocaux en cache et les sommes sha1 et Gradle est dans une situation où il n’ya pas d’artefact sur votre machine et doit tout télécharger. Oui, cela fonctionnera à 100% pour la première fois, mais lorsqu'un autre SNAPSHOT est publié et qu'il fait partie de votre arbre de dépendance, vous serez de nouveau confronté au choix d'actualiser ou de purger les caches.
supprimer ce répertoire:
C:\Users\[username]\.gradle
Pour Android Studio 3.4.1
Ouvrez simplement l'onglet de dégradé (situé à droite) et cliquez avec le bouton droit de la souris sur le parent dans la liste (devrait s'appeler "Android"), puis sélectionnez "Actualiser les dépendances".
Cela devrait résoudre votre problème.
Mo je suis trop tard mais ma solution est pour le référentiel unique. Je pense que supprimer ~/.gradle/* est excessif. Le problème auquel je me suis heurté était que je supprimais le répertoire contenant les sources et que gradle recevait une autre version non issue de Nexus. Pour éviter que je lance le suivant:
~/.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
Après que Gradle fait glisser des fichiers de Nexus.
Pour ceux qui se demandent où exécuter les commandes Gradle:
Ouvrez le studio Android -> Cliquez sur Terminal (vous le trouverez dans la base du studio Android) -> L'outil de commande va s'ouvrir
Si vous utilisez Eclipse et si vous souhaitez le forcer à recharger des dépendances, vous pouvez essayer la commande ci-dessous
gradlew clean cleaneclipse build Eclipse --refresh-dependencies
La suppression de tous les caches rend le téléchargement de toutes les dépendances à nouveau. Donc, cela prend si longtemps et c'est ennuyeux d'attendre encore pour télécharger à nouveau toutes les dépendances.
Comment jamais je pourrais être en mesure de résoudre ce problème ci-dessous.
Supprimez simplement les groupes qui doivent être actualisés.
Ex: si on veut actualiser com.user.test groupe
rm -fr ~/.gradle/caches/modules-2/files-2.1/com.user.test/
puis supprimez la dépendance de build.gradle et ajoutez-la à nouveau. alors il va actualiser les dépendances ce que nous voulons.
Tu peux le faire comme ça
https://marschall.github.io/2017/04/17/disabling-gradle-cache.html
Pour citer entre Désactiver le cache de construction Gradle
Le cache de génération Gradle peut être une bonne chose lorsque vous construisez régulièrement des projets volumineux avec Gradle. Cependant, lorsque vous ne construisez que occasionnellement des> projets open source, cela peut rapidement devenir volumineux.
Pour désactiver le cache de génération Gradle, ajoutez 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/
Dans la majorité des cas, il suffit de reconstruire le projet. Parfois, vous devez exécuter ./gradlew build --refresh-dependencies
car plusieurs réponses ont déjà été mentionnées (prend beaucoup de temps, en fonction du nombre de dépendances dont vous disposez). Cependant, parfois, aucun de ceux-ci ne fonctionnera: la dépendance ne sera simplement pas mise à jour. Ensuite, vous pouvez faire ceci:
NonExistingClass
raison) C’est ridicule et cela ressemble à de la folie, mais j’utilise cette procédure tous les jours, tout simplement parce que la dépendance dont j’ai besoin peut être mise à jour des dizaines de fois et qu’aucune solution adéquate n’aurait d’effet.
Je pense que Gradle 2.14.1 corrige le problème. La réponse acceptée est correcte, mais il y a un bogue dans gradle avec –refresh-dependencies. 2.14.1 corrige cela.
Voir https://discuss.gradle.org/t/refresh-dependencies-should-use-cachechangingmodulesfor-0s/556