web-dev-qa-db-fra.com

Comment puis-je forcer Gradle à retélécharger des dépendances?

Comment puis-je dire à Gradle de télécharger à nouveau les dépendances à partir de référentiels?

588
fedor.belov

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/
715
Benjamin Muschko

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. 

494
Naga

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 .

269
Umi

Pour Mac  

./gradlew build --refresh-dependencies

Pour les fenêtres  

gradlew build --refresh-dependencies

Peut aussi essayer gradlew assembleDevelopmentDebug --refresh-dependencies

53
Ali

Pour Windows ... afin de rendre les dépendances spécifiques de nouvelles versions:

  1. 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
    
  2. supprimez tous les répertoires metadata dans le chemin:

    C:\Users\[username]\.gradle\caches\modules-2\metadata-*
    
  3. 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.

22
Eric

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.

16
Farhan

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.

9
Jared Rummler

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.

6
Juan Mendez

Il y a 2 façons de faire ça:

  1. Utilisation de l'option de ligne de commande pour actualiser le fichier de dépend. 
  2. Vous pouvez supprimer le cache local où les artefasts sont caches par Gradle et déclencher la construction

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

  • Avec Gradual dépend du référentiel, Gradle contactera toujours le serveur distant pour rechercher les artefacts mis à jour. Toutefois, Gradle évitera de télécharger un fichier contenant déjà le même fichier dans le cache.
    • First Gradle fera une demande HEAD et vérifiera si le serveur indique que le fichier n’a pas été modifié depuis la dernière fois (si les champs ‘content-length’ et ‘last-modified’ sont inchangés). Dans ce cas, vous obtenez le message suivant: "La ressource mise en cache est à jour (lastModified: {})".
    • Next Gradle déterminera la somme de contrôle à distance si possible (à partir de la demande HEAD ou en téléchargeant un fichier '.sha1') .. Si cette somme de contrôle correspond à un autre fichier déjà téléchargé (de n'importe quel référentiel), Gradle copiera simplement le fichier dans la mémoire cache, plutôt que de le télécharger à nouveau. Dans ce cas, vous recevrez le message suivant: "" Ressource disponible localement avec la somme de contrôle correspondante: [{}, {}] ".

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.

6
Xelian

supprimer ce répertoire:

C:\Users\[username]\.gradle
2
farhang67

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.

1
Captain Sponge

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.

1
Vadim

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

1
kgandroid

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
0
ULLAS K

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. 

0
Chamly Idunil

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/
0
wuqilong

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:

  1. Supprimer la dépendance de votre fichier de classement
  2. Exécuter/déboguer votre projet et attendre son échec (avec NonExistingClass raison) 
  3. Hit "build project" et attendez qu'il se termine avec succès
  4. Exécuter/déboguer à nouveau

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. 

0
egorikem

Aucune des solutions ci-dessus n'a fonctionné pour moi.

Si vous utilisez IntelliJ, ce qui a résolu le problème pour moi a tout simplement été d'actualiser tous les projets Gradle:

 enter image description here

0
Kobbi Gal

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

0
Jacques Koorts