it-swarm.com.de

Wie kann ich Gradle dazu bringen, Abhängigkeiten erneut herunterzuladen?

Wie kann ich Gradle anweisen, Abhängigkeiten aus Repositories erneut herunterzuladen?

588
fedor.belov

Im Allgemeinen können Sie Abhängigkeiten in Ihrem Cache mit der Befehlszeilenoption --refresh-dependencies aktualisieren. Sie können die zwischengespeicherten Dateien auch unter ~/.gradle/caches löschen. Mit dem nächsten Build würde Gradle versuchen, sie erneut herunterzuladen.

Was ist Ihr spezieller Anwendungsfall? Verwenden Sie dynamische Abhängigkeitsversionen oder SNAPSHOT-Versionen?


Auf Unix-Systemen können Sie alle vorhandenen Artefakte (Artefakte und Metadaten) löschen, die Gradle mit folgendem Befehl heruntergeladen hat:

rm -rf $HOME/.gradle/caches/
715

Wenn Sie eine aktuelle Version von Gradle verwenden, können Sie die Option --refresh-dependencies verwenden. 

./gradlew build --refresh-dependencies

sie können sich auf das Gradle-Handbuch beziehen.

Die Option --refresh-dependencies weist Gradle an, alle zwischengespeicherten Einträge für aufgelöste Module und Artefakte zu ignorieren. Eine neue Lösung wird für alle konfigurierten Repositorys ausgeführt, wobei dynamische Versionen neu berechnet, Module aktualisiert und Artefakte heruntergeladen werden. 

494
Naga

Sie können Gradle anweisen, einige Abhängigkeiten im Build-Skript erneut herunterzuladen, indem Sie die Abhängigkeit als "ändern" kennzeichnen. Gradle sucht dann alle 24 Stunden nach Updates. Dies kann jedoch mit der ResolutionStrategy DSL konfiguriert werden. Ich finde es nützlich, dies für SNAPSHOT- oder NIGHTLY-Builds zu verwenden.

configurations.all {
    // Check for updates every build
    resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}

Erweitert:

dependencies {
    compile group: "group", name: "projectA", version: "1.1-SNAPSHOT", changing: true
}

Kondensiert:

compile('group:projectA:1.1-SNAPSHOT') { changing = true }

Ich habe diese Lösung in diesem Forumsthread gefunden.

269
Umi

Für MAC  

./gradlew build --refresh-dependencies

Für Windows  

gradlew build --refresh-dependencies

Kann auch gradlew assembleDevelopmentDebug --refresh-dependencies versuchen

53
Ali

Für Windows ..., um das Herunterladen von bestimmten - Abhängigkeiten zu ermöglichen:

  1. löschen Sie die Abhängigkeiten, die Sie erneut herunterladen möchten, aus dem folgenden Verzeichnis:

    C:\Users\[username]\.gradle\caches\modules-2\files-2.1
    
  2. löschen Sie alle metadata -Verzeichnisse unter dem Pfad:

    C:\Users\[username]\.gradle\caches\modules-2\metadata-*
    
  3. führen Sie gradle build (oder gradlew build bei Verwendung des Gradle-Wrappers) im Stammverzeichnis des Projekts aus.

note: Die Zahlen in den obigen Dateipfaden können für Sie unterschiedlich sein.

22
Eric

Man kann Ordner mit zwischengespeicherten Gläsern entfernen.

In meinem Fall auf dem Mac wurde die Bibliothek im Pfad zwischengespeichert:

/Users/MY_NAME/.gradle/caches/modules-2/files-2.1/cached-library-to-remove

Ich habe den zwischengespeicherten Bibliotheksordner entfernt ("cached-library-to-remove" im obigen Beispiel), den Erstellungsordner meines Projekts gelöscht und erneut kompiliert. Neue Bibliothek wurde dann heruntergeladen.

16
Farhan

Anstatt den gesamten Gradle-Cache zu entfernen, können Sie, wie einige Antworten hier vorschlagen, den Cache für eine bestimmte Gruppen- oder Artefakt-ID löschen. Ich habe meinem .bash_profile die folgende Funktion hinzugefügt:

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
}

Verwendungszweck:

$ deleteGradleCache com.Android.support

Beim nächsten Build oder bei einer erneuten Synchronisierung lädt Gradle die Abhängigkeiten erneut herunter.

9
Jared Rummler

Dies hat für mich funktioniert. Stellen Sie sicher, dass Gradle nicht auf offline gesetzt ist, indem Sie die Schaltfläche unter Datei> Einstellungen> Gradle> Offline-Arbeit deaktivieren.

Fügen Sie dies der obersten Ebene Ihres build.gradle hinzu, Nice, um Abhängigkeiten zu haben

configurations.all {
    resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}

Ich stellte sicher, dass meine Abhängigkeiten so geschrieben sind:

implementation('com.github.juanmendez:ThatDependency:ThatBranch-SNAPSHOT') {
    changing = true
}

Danach öffne ich das Gradle-Bedienfeld in Android Studio und klicke auf die Schaltfläche mit den blauen Kreispfeilen. Ich kann immer sehen, dass meine Updates eine neue, frische Kopie erhalten.

6
Juan Mendez

Dafür gibt es zwei Möglichkeiten:

  1. Verwenden der Befehlszeilenoption zum Aktualisieren von Abhängigkeiten. 
  2. Sie können den lokalen Cache löschen, in dem Artefasts Caches nach Gradle und Trigger Build sind

Verwenden der Option --refresh-dependencies:

./gradlew build --refresh-dependencies

Kurze Erklärung --refresh-dependencies-Option weist Gradle an, alle zwischengespeicherten Einträge für aufgelöste Module und Artefakte zu ignorieren. 

Lange Erklärung

  • Mit „frischen Abhängigkeiten“ wird Gradle immer den Remote-Server ansteuern, um nach aktualisierten Artefakten zu suchen: Gradle wird jedoch das Herunterladen einer Datei vermeiden, in der sich bereits dieselbe Datei im Cache befindet.
    • First Gradle stellt eine HEAD -Anfrage und prüft, ob der Server die Datei seit dem letzten Mal als unverändert gemeldet hat (wenn "Inhaltslänge" und "Zuletzt geändert" unverändert bleiben). In diesem Fall erhalten Sie die Meldung: "Die zwischengespeicherte Ressource ist auf dem neuesten Stand (lastModified: {})."
    • Als Nächstes bestimmt Gradle die Remote-Prüfsumme, wenn dies möglich ist (entweder aus der Anforderung HEAD oder durch Herunterladen einer '.sha1' -Datei) ... Wenn diese Prüfsumme mit einer bereits heruntergeladenen Datei (aus einem beliebigen Repository) übereinstimmt, dann Gradle kopiert die Datei einfach in den Cache, anstatt erneut herunterzuladen. In diesem Fall erhalten Sie die Meldung: "" Lokal verfügbare Ressource mit übereinstimmender Prüfsumme gefunden: [{}, {}] ".

Mit delete: Beim Löschen von Caches 

rm -rf $HOME/.gradle/caches/

Sie säubern einfach alle zwischengespeicherten Gläser und sha1-Summen und Gradle befindet sich in einer Situation, in der sich keine Artefakte auf Ihrem Computer befinden und Sie müssen alles herunterladen. Ja, es wird zum ersten Mal zu 100% funktionieren, aber wenn ein anderes SNAPSHOT freigegeben wird und Teil Ihres Abhängigkeitsbaums ist, werden Sie vor der Entscheidung erneut angezeigt, die Caches zu aktualisieren oder zu löschen.

6
Xelian

lösche dieses Verzeichnis:

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

Für Android Studio 3.4.1

Öffnen Sie einfach die Registerkarte gradle (befindet sich rechts) und klicken Sie mit der rechten Maustaste auf das übergeordnete Element in der Liste (sollte "Android" heißen). Wählen Sie dann "Abhängigkeiten aktualisieren".

Dies sollte Ihr Problem beheben.

1
Captain Sponge

Mb Ich bin zu spät, aber meine Lösung ist für ein einzelnes Repository. Ich denke, ~/.gradle/* zu löschen, ist übertrieben. Das Problem, auf das ich gestoßen bin, war, dass ich ein Verzeichnis löschte, in dem sich Quellen befanden und Gradle eine andere Version erhielt, die nicht von Nexus stammt. Um dies zu vermeiden, führe ich das nächste aus:

~/.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

Danach zieht Gradle Dateien aus Nexus.

1
Vadim

Für diejenigen, die sich fragen, wo Gradle-Befehle ausgeführt werden sollen:

Öffnen Sie Android Studio -> Klicken Sie auf Terminal (Sie finden es in der Basis von Android Studio) -> Das Befehlswerkzeug wird geöffnet ---> Geben Sie Ihren Befehl ein (gradlew build --refresh-dependencies)

1
kgandroid

Wenn Sie Eclipse verwenden und Eclipse zwingen möchten, Abhängigkeiten erneut zu laden, können Sie den folgenden Befehl verwenden 

gradlew clean cleaneclipse build Eclipse --refresh-dependencies
0
ULLAS K

Durch das Löschen aller Caches werden alle Abhängigkeiten erneut heruntergeladen. Es dauert also so lange und es ist langweilig, nochmal zu warten, um alle Abhängigkeiten herunterzuladen. 

Wie auch immer, ich könnte in der Lage sein, dies unten zu lösen. 

Löschen Sie einfach Gruppen, die aktualisiert werden müssen. 

Bsp .: wenn wir com.user.test group aktualisieren möchten 

rm -fr ~/.gradle/caches/modules-2/files-2.1/com.user.test/

entfernen Sie dann die Abhängigkeit von build.gradle und fügen Sie sie erneut hinzu. dann werden die Abhängigkeiten aktualisiert, was wir wollen. 

0
Chamly Idunil

Sie können es so machen

https://marschall.github.io/2017/04/17/disabling-gradle-cache.html

Zitieren von Deaktivieren des Gradle Build Cache

Der Gradle-Build-Cache ist möglicherweise eine großartige Sache, wenn Sie regelmäßig> große Projekte mit Gradle erstellen. Wenn jedoch nur gelegentlich Open-Source-Projekte erstellt werden, kann dies schnell groß werden.

Um den Gradle-Build-Cache zu deaktivieren, fügen Sie die folgende Zeile zu ~/.gradle/gradle.properties hinzu.

org.gradle.caching=false

Sie können den vorhandenen Cache mit bereinigen

rm -rf $HOME/.gradle/caches/
rm -rf $HOME/.gradle/wrapper/
0
wuqilong

In den meisten Fällen sollte das Projekt einfach neu aufgebaut werden. Manchmal müssen Sie ./gradlew build --refresh-dependencies ausführen, da mehrere Antworten bereits erwähnt wurden (dies dauert je nach Abhängigkeit der Abhängigkeiten sehr lange). Manchmal funktioniert jedoch keines davon: Die Abhängigkeit wird einfach nicht aktualisiert. Dann können Sie folgendes tun:

  1. Entfernen Sie die Abhängigkeit von Ihrer Abstufungsdatei
  2. Starten Sie Ihr Projekt und debuggen Sie, und warten Sie, bis es fehlschlägt (mit NonExistingClass reason). 
  3. Klicken Sie auf "Projekt erstellen" und warten Sie, bis es erfolgreich abgeschlossen ist
  4. Führen Sie/debug noch einmal aus

Das ist lächerlich und wirkt wie ein Wahnsinn, aber ich verwende dieses Verfahren tatsächlich täglich, einfach weil die Abhängigkeit, die ich brauche, Dutzende Male aktualisiert werden kann und keine der adäquaten Lösungen irgendwelche Auswirkungen hätte. 

0
egorikem

Keine der oben genannten Lösungen hat bei mir funktioniert.

Wenn Sie IntelliJ verwenden, wurde für mich lediglich die Aktualisierung aller Gradle-Projekte durchgeführt:

 enter image description here

0
Kobbi Gal

Ich denke Gradle 2.14.1 behebt das Problem. Die akzeptierte Antwort ist korrekt, aber es gibt einen Fehler in Gradle -fresh-Abhängigkeiten. 2.14.1 behebt das.

Siehe https://discuss.gradle.org/t/refresh-dependencies-should-use-cachechangingmodulesfor-0s/556

0
Jacques Koorts