Wie kann ich gradle anweisen, Abhängigkeiten aus Repositorys erneut herunterzuladen?
Wie kann ich gradle anweisen, Abhängigkeiten aus Repositorys erneut herunterzuladen?
Antworten:
Im Allgemeinen können Sie Abhängigkeiten in Ihrem Cache mit der Befehlszeilenoption --refresh-dependencies aktualisieren . Sie können die zwischengespeicherten Dateien auch unter löschen ~/.gradle/caches
. Mit dem nächsten Build würde Gradle versuchen, sie erneut herunterzuladen.
Was ist Ihr spezifischer 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 heruntergeladen hat, indem Sie:
rm -rf $HOME/.gradle/caches/
find $HOME/.gradle/caches/ -name "*LIBRARY_NAME*" -exec rm -r {} \;
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. Für alle konfigurierten Repositorys wird eine neue Auflösung durchgeführt, wobei dynamische Versionen neu berechnet, Module aktualisiert und Artefakte heruntergeladen werden.
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 AuflösungStrategy 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 {
implementation group: "group", name: "projectA", version: "1.1-SNAPSHOT", changing: true
}
Kondensiert:
implementation('group:projectA:1.1-SNAPSHOT') { changing = true }
Ich habe diese Lösung in diesem Forenthread gefunden .
cacheChangingModulesFor
ist der Schlüssel, changing: true
ist optional, weil es impliziert ist -SNAPSHOT
, es ist möglich, die Kurzschrift hier zu verwenden: compile 'group:projectA:1.1-SNAPSHOT'
wegen der obigen Implikation. Man kann die Auflösungsstrategie auch auf eine Konfiguration beschränken : configurations.compile.resolutionS...
.
compile 'com.burrowsapps:ads:1.0:true'
?
Für MAC
./gradlew build --refresh-dependencies
Für Windows
gradlew build --refresh-dependencies
Kann es auch versuchen gradlew assembleDevelopmentDebug --refresh-dependencies
gradle wrapper
Aufgabe erstellen. Sie können sogar einen Wrapper mit einem anderen Gradle-Wrapper generieren:gradlew wrapper
Für Windows ... um Gradle dazu zu bringen, bestimmte Abhängigkeiten erneut herunterzuladen :
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
Löschen Sie alle Metadatenverzeichnisse im Pfad:
C:\Users\%USERNAME%\.gradle\caches\modules-2\metadata-*
Führen Sie gradle build
(oder gradlew build
wenn Sie einen Gradle-Wrapper verwenden) das Stammverzeichnis des Projekts aus.
Hinweis: Die Nummern in den obigen Dateipfaden können für Sie unterschiedlich sein.
Man kann Ordner mit zwischengespeicherten Gläsern entfernen.
In meinem Fall wurde die Bibliothek auf einem Mac im Pfad zwischengespeichert:
/Users/MY_NAME/.gradle/caches/modules-2/files-2.1/cached-library-to-remove
Ich habe den zwischengespeicherten Bibliotheksordner entfernt (im obigen Beispiel "zu entfernende zwischengespeicherte Bibliothek"), den Build-Ordner meines Projekts gelöscht und erneut kompiliert. Dann wurde eine neue Bibliothek heruntergeladen.
Anstatt Ihren gesamten Gradle-Cache zu entfernen, wie einige Antworten hier vorschlagen, können Sie den Cache für eine bestimmte Gruppen- oder Artefakt-ID löschen. Ich habe die folgende Funktion zu meiner hinzugefügt .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
}
Verwendungszweck:
$ deleteGradleCache com.android.support
Beim nächsten Build oder beim erneuten Synchronisieren lädt gradle die Abhängigkeiten erneut herunter.
Dafür gibt es zwei Möglichkeiten:
Verwenden der Option --refresh-dependencies :
./gradlew build --refresh-dependencies
Kurze Erklärung - Die Option --refresh-dependencies weist Gradle an, alle zwischengespeicherten Einträge für aufgelöste Module und Artefakte zu ignorieren.
Lange Erklärung
Löschen verwenden: Wenn Sie Caches löschen
rm -rf $HOME/.gradle/caches/
Sie reinigen 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 alles heruntergeladen werden muss. Ja, es funktioniert zum ersten Mal zu 100%, aber wenn ein anderer SNAPSHOT veröffentlicht wird und er Teil Ihres Abhängigkeitsbaums ist, stehen Sie erneut vor der Wahl, die Caches zu aktualisieren oder zu löschen.
Das hat bei mir funktioniert. Stellen Sie sicher, dass Gradle nicht offline ist, indem Sie die Schaltfläche unter Datei> Einstellungen> Gradle> Offline-Arbeit deaktivieren.
Fügen Sie dies zur obersten Ebene Ihres build.gradle hinzu, schön, dass Sie die oben genannten Abhängigkeiten haben
configurations.all {
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
Ich habe sichergestellt, dass meine Abhängigkeiten folgendermaßen 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 Kopie erhalten.
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.
Mb Ich bin zu spät, aber meine Lösung ist für ein einzelnes Repository. Ich denke, das Löschen von ~ / .gradle / * 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 dem Nexus.
Um die zwischengespeicherte Release-Version zu aktualisieren, besteht die einzige Option darin, den lokalen Cache zu löschen.
rm -rf $HOME/.gradle/caches/
So aktualisieren Sie die zwischengespeicherte Snapshot-Version:
./gradlew build --refresh-dependencies
Wenn Sie alle Caches löschen, werden alle Abhängigkeiten erneut heruntergeladen. Es dauert also so lange und es ist langweilig, noch einmal zu warten, um alle Abhängigkeiten erneut herunterzuladen.
Wie auch immer, ich könnte dies unten lösen.
Löschen Sie einfach Gruppen, die aktualisiert werden müssen.
Beispiel: Wenn wir die Gruppe com.user.test 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.
Ich denke, Gradle 2.14.1 behebt das Problem. Die akzeptierte Antwort ist korrekt, aber es gibt einen Fehler in Gradle mit –refresh-Abhängigkeiten. 2.14.1 behebt das.
Siehe https://discuss.gradle.org/t/refresh-dependencies-should-use-cachechangingmodulesfor-0s/556
Löschen Sie dieses Verzeichnis:
C:\Users\[username]\.gradle
In den meisten Fällen reicht es aus, das Projekt einfach neu aufzubauen. Manchmal müssen Sie ausführen, ./gradlew build --refresh-dependencies
wie bereits mehrere Antworten erwähnt haben (dies dauert lange, je nachdem, wie viele Abhängigkeiten Sie haben). Manchmal funktioniert jedoch keines davon: Die Abhängigkeit wird einfach nicht aktualisiert. Dann können Sie dies tun:
NonExistingClass
Grund).Das ist lächerlich und scheint Wahnsinn zu sein, 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 angemessenen Lösungen Auswirkungen haben würde.
Sie können es so machen
https://marschall.github.io/2017/04/17/disabling-gradle-cache.html
Zitat aus Deaktivieren des Gradle-Build-Cache
Der Gradle-Build-Cache kann eine großartige Sache sein, wenn Sie regelmäßig> große Projekte mit Gradle erstellen. Wenn jedoch nur gelegentlich Open Source-Projekte erstellt werden, kann dies schnell zu einer großen Größe führen.
Um den Gradle-Build-Cache zu deaktivieren, fügen Sie die folgende Zeile hinzu
~/.gradle/gradle.properties
org.gradle.caching=false
Sie können den vorhandenen Cache mit bereinigen
rm -rf $HOME/.gradle/caches/ rm -rf $HOME/.gradle/wrapper/
Wenn Sie Eclipse verwenden und Eclipse zum erneuten Laden von Abhängigkeiten erzwingen möchten, können Sie den folgenden Befehl verwenden
gradlew clean cleaneclipse build eclipse --refresh-dependencies
Nur ein manuelles Löschen der spezifischen Abhängigkeit im Cache-Ordner funktioniert ... ein Artefakt, das von einem Kollegen in Enterprise Repo erstellt wurde.
In meinem Fall hat keines der oben genannten Verfahren funktioniert. Ich habe Folgendes getan:
build.gradle
, kommentieren die zu den ungelösten Einfuhren Abhängigkeiten Ich hatteDann wurden meine Importe wieder richtig aufgelöst.
Sie müssen es erneut herunterladen, damit Sie die beschädigte Datei entweder manuell herunterladen und ersetzen und Ihr Projekt erneut synchronisieren können. Gehen Sie zu diesem Speicherort C: \ users [Benutzername] .gradle \ wrapper \ dist \ gradle3.3-all \ 55gk2rcmfc6p2dg9u9ohc3hw9 \ gradle-3.3-all.zip. Löschen Sie hier gradle3.3allzip und ersetzen Sie es, indem Sie es erneut von dieser Site herunterladen. Https : / /services.gradle.org/distributions/ Suchen Sie dieselbe Datei und laden Sie sie herunter und fügen Sie sie an diesem Speicherort ein. Synchronisieren Sie dann Ihr Projekt. Hoffe es funktioniert auch bei dir.