Gradle'a bağımlılıkları depolardan yeniden indirmesini nasıl söyleyebilirim?
Gradle'a bağımlılıkları depolardan yeniden indirmesini nasıl söyleyebilirim?
Yanıtlar:
Genellikle, önbellekteki bağımlılıkları komut satırı seçeneği olan --refresh-bağımlılıkları ile yenileyebilirsiniz . Ayrıca önbelleğe alınan dosyaları da silebilirsiniz ~/.gradle/caches
. Bir sonraki derleme ile Gradle onları tekrar indirmeyi dener.
Özel kullanım durumunuz nedir? Dinamik bağımlılık sürümleri veya SNAPSHOT sürümleri kullanıyor musunuz?
Unix sistemlerinde, Gradle'ın indirdiği tüm mevcut yapay nesneleri (yapay nesneler ve meta veriler) silebilirsiniz:
rm -rf $HOME/.gradle/caches/
find $HOME/.gradle/caches/ -name "*LIBRARY_NAME*" -exec rm -r {} \;
Gradle'ın son bir sürümünü kullanıyorsanız --refresh-dependsencies seçeneğini kullanabilirsiniz.
./gradlew build --refresh-dependencies
Gradle kılavuzuna başvurabilirsiniz .
--Refresh-bağımlılıkları seçeneği Gradle'a çözümlenmiş modüller ve yapay nesneler için tüm önbelleğe alınmış girdileri yok saymasını söyler. Dinamik sürümler yeniden hesaplanmış, modüller yenilenmiş ve eserler indirilmiş olarak, yapılandırılmış tüm depolara karşı yeni bir çözüm gerçekleştirilecektir.
Gradle'a, bağımlılığı 'değişen' olarak işaretleyerek derleme komut dosyasındaki bazı bağımlılıkları yeniden indirmesini söyleyebilirsiniz. Gradle daha sonra güncellemeleri 24 saatte bir kontrol eder, ancak bu çözünürlük ResolutionStrategy DSL kullanılarak yapılandırılabilir. Bunu SNAPSHOT veya NIGHTLY yapıları için kullanmayı yararlı buluyorum.
configurations.all {
// Check for updates every build
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
Expanded:
dependencies {
implementation group: "group", name: "projectA", version: "1.1-SNAPSHOT", changing: true
}
Yoğun:
implementation('group:projectA:1.1-SNAPSHOT') { changing = true }
Bu çözümü bu forum iş parçacığında buldum .
cacheChangingModulesFor
anahtar, changing: true
isteğe bağlıdır, çünkü zımni -SNAPSHOT
, burada kısayol kullanmak mümkündür: compile 'group:projectA:1.1-SNAPSHOT'
yukarıdaki ima nedeniyle. Bir de bir config resolutionStrategy kısıtlayabilirsiniz: configurations.compile.resolutionS...
.
compile 'com.burrowsapps:ads:1.0:true'
?
Mac için
./gradlew build --refresh-dependencies
Pencereler için
gradlew build --refresh-dependencies
Ayrıca deneyebilir gradlew assembleDevelopmentDebug --refresh-dependencies
gradle wrapper
Görevi kullanarak bir tane oluşturabilirsiniz ; başka bir Gradle sarıcı kullanarak bir sarıcı bile oluşturabilirsiniz:gradlew wrapper
Windows için ... sırayla gradle yeniden indirme yapmak için özgü bağımlılıkları yapmak için:
yeniden indirmek istediğiniz bağımlılıkları aşağıdaki dizinden silin:
C:\Users\%USERNAME%\.gradle\caches\modules-2\files-2.1
yoldaki tüm meta veri dizinlerini sil :
C:\Users\%USERNAME%\.gradle\caches\modules-2\metadata-*
Projenin kök dizininde çalıştırın gradle build
(veya gradlew build
sınıflayıcı sarmalayıcı kullanıyorsanız).
not: yukarıdaki dosya yollarındaki sayılar sizin için farklı olabilir.
Önbellek kavanozları ile klasörü kaldırabilirsiniz.
Benim durumumda, Mac'te kütüphane yolda önbelleğe alındı:
/Users/MY_NAME/.gradle/caches/modules-2/files-2.1/cached-library-to-remove
Önbelleğe alınmış kütüphane klasörünü kaldırdım (yukarıdaki örnekte "kaldırılacak önbellek-kaldırılacak"), projemin derleme klasörünü sildim ve tekrar derledim. Taze kütüphane indirildi.
Burada verilen bazı yanıtların önerdiği gibi, tüm sınıf önbelleğinizi kaldırmak yerine, belirli bir grup veya yapay nesne kimliği için önbelleği silebilirsiniz. Aşağıdaki işlevi ekledim .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
}
Kullanımı:
$ deleteGradleCache com.android.support
Ardından, bir sonraki derlemede veya yeniden senkronize ederseniz, sınıflandırma bağımlılıkları yeniden indirir.
Bunu yapmanın 2 yolu vardır:
--Refresh-bağımlılıklar seçeneğini kullanma :
./gradlew build --refresh-dependencies
Kısa açıklama - yenileme bağımlılıkları seçeneği Gradle'a çözümlenmiş modüller ve yapay nesneler için tüm önbelleğe alınmış girdileri yok saymasını söyler.
Uzun açıklama
Sil özelliğini kullanma: Önbellekleri sildiğinizde
rm -rf $HOME/.gradle/caches/
Tüm önbellek kavanozlarını ve sha1 toplamlarını temizlersiniz ve Gradle, makinenizde herhangi bir eser bulunmadığı ve her şeyi indirmesi gereken bir durumdadır. Evet, ilk kez% 100 çalışacak, ancak başka bir SNAPSHOT serbest bırakıldığında ve bağımlılık ağacınızın bir parçası olduğunda, önbellekleri yenileme veya temizleme seçeneğinin önünde tekrar karşılaşacaksınız.
Bu benim için çalıştı. Dosya> Ayarlar> Gradle> Çevrimdışı Çalışma'daki düğmenin işaretini kaldırarak Gradle'ın çevrimdışı olarak ayarlanmadığından emin olun.
Bunu yukarıdaki bağımlılıklara sahip olmak güzel, build.gradle üst düzeyine ekleyin
configurations.all {
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
Bağımlılıklarımın şu şekilde yazıldığından emin oldum:
implementation('com.github.juanmendez:ThatDependency:ThatBranch-SNAPSHOT') {
changing = true
}
Daha sonra, Android Studio'da Gradle panelini açıyorum ve mavi daire okları düğmesini tıklıyorum. Güncellemelerimin her zaman yeni bir kopya aldığını görebiliyorum.
Android Studio 3.4.1 için
Gradle sekmesini açın (sağda bulunabilir) ve listedeki üst öğeye sağ tıklayın ("Android" olarak adlandırılmalıdır), ardından "Bağımlılıkları yenile" yi seçin.
Bu, sorununuzu çözmelidir.
Mb Çok geç kaldım ancak çözümüm tek bir depo için. Bence ~ / .gradle / * silmek aşırıya kaçmış. İçinde bulunduğum problmem, kaynakların olduğu ve sınıfın nexus'tan değil başka bir sürüm aldığı dizini siliyordum. Bundan kaçınmak için bir sonraki çalıştırıyorum:
~/.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
Bundan sonra, dosyalar nexus'tan sürükleniyor.
Önbelleğe alınmış 'serbest bırakma' sürümünü yenilemek için tek seçenek yerel önbelleği temizlemektir.
rm -rf $HOME/.gradle/caches/
Önbelleğe alınmış 'anlık görüntü' sürümünü yenilemek için şunları yapabilirsiniz:
./gradlew build --refresh-dependencies
Tüm önbellekleri silmek, tüm güvenilirliklerin tekrar indirilmesini sağlar. bu yüzden çok uzun zaman alıyor ve sıkıcı bir şey, tüm bağımlılıkları yeniden indirmek için tekrar bekleyin.
Nasıl bu şekilde aşağıda çözmek mümkün.
Yenilenmesi gereken grupları silin.
Örn: com.user.test grubunu yenilemek istiyorsak
rm -fr ~/.gradle/caches/modules-2/files-2.1/com.user.test/
sonra bağımlılığı build.gradle dosyasından kaldırın ve yeniden ekleyin. o zaman bağımlılıkları istediğimizi yenileyecek.
Bence 2.14.1. Kabul edilen cevap doğrudur, ancak sınıfta –yenileme bağımlılıkları olan bir hata vardır. 2.14.1 bunu düzeltir.
Bkz. Https://discuss.gradle.org/t/refresh-dependencies-should-use-cachechangingmodulesfor-0s/556
bu dizini sil:
C:\Users\[username]\.gradle
Çoğu durumda, sadece projeyi yeniden inşa etmek hile yapmalıdır. Bazen ./gradlew build --refresh-dependencies
birkaç cevabın daha önce bahsettiği gibi koşmanız gerekir (ne kadar bağımlılığınız olduğuna bağlı olarak uzun zaman alır). Her nasılsa, bazen bunların hiçbiri işe yaramaz: bağımlılık güncellenmez. Sonra bunu yapabilirsiniz:
NonExistingClass
olmasını nedeni ile)Bu çok saçma ve delilik gibi görünüyor, ama aslında bu prosedürü günlük olarak kullanıyorum, çünkü ihtiyacım olan bağımlılık düzinelerce kez güncellenebilir ve yeterli çözümlerin hiçbiri herhangi bir etki yaratmaz.
Böyle yapabilirsin
https://marschall.github.io/2017/04/17/disabling-gradle-cache.html
Dan alıntı Gradle Yapı Cache devre dışı bırakma
Gradle ile düzenli olarak büyük projeler inşa ederken Gradle derleme önbelleği harika bir şey olabilir. Ancak, sadece zaman zaman açık kaynaklı projeler inşa ederken, hızla büyüyebilir.
Gradle derleme önbelleğini devre dışı bırakmak için şu satırı ekleyin:
~/.gradle/gradle.properties
org.gradle.caching=false
Mevcut önbelleği ile temizleyebilirsiniz.
rm -rf $HOME/.gradle/caches/ rm -rf $HOME/.gradle/wrapper/
Eclipse kullanıyorsanız ve eclipse'nin bağımlılıkları yeniden yüklemesini istiyorsanız, aşağıdaki komutu deneyebilirsiniz
gradlew clean cleaneclipse build eclipse --refresh-dependencies
Önbellek klasöründeki belirli bağımlılığın manuel olarak silinmesi işe yarar ... bir iş arkadaşı tarafından kurumsal repoda inşa edilen bir eser.
Benim durumumda yukarıdakilerin hiçbiri işe yaramadı, yaptığım şey:
build.gradle
, sahip olduğum çözülmemiş ithalata ilişkin bağımlılıkları yorumlarkenSonra ithalatım düzgün bir şekilde çözüldü.
Yeniden indirmeniz gerekir, böylece bozuk dosyayı manuel olarak indirip değiştirebilir ve projenizi tekrar senkronize edebilirsiniz. Bu konuma gidin C: \ users [kullanıcı adı] .gradle \ wrapper \ dist \ gradle3.3-all \ 55gk2rcmfc6p2dg9u9ohc3hw9 \ gradle-3.3-all.zip Burada gradle3.3allzip'i silin ve bu siteden tekrar indirerek değiştirin https: / /services.gradle.org/distributions/ Aynı dosyayı bulun ve indirip bu konuma yapıştırın Sonra projenizi senkronize edin. Umarım senin için de çalışır.