Bagaimana saya dapat memberitahu gradle untuk mengunduh kembali dependensi dari repositori?
Bagaimana saya dapat memberitahu gradle untuk mengunduh kembali dependensi dari repositori?
Jawaban:
Secara umum, Anda dapat menyegarkan dependensi di cache dengan opsi baris perintah --reesh-dependensi . Anda juga dapat menghapus file yang di-cache di bawah ~/.gradle/caches
. Dengan build selanjutnya, Gradle akan mencoba mengunduhnya lagi.
Apa kasus penggunaan khusus Anda? Apakah Anda menggunakan versi ketergantungan dinamis atau versi SNAPSHOT?
Pada sistem Unix, Anda dapat menghapus semua artefak (artefak dan metadata) yang ada yang diunduh Gradle menggunakan:
rm -rf $HOME/.gradle/caches/
find $HOME/.gradle/caches/ -name "*LIBRARY_NAME*" -exec rm -r {} \;
Jika Anda menggunakan versi terbaru Gradle, Anda dapat menggunakan opsi --refresh-dependencies.
./gradlew build --refresh-dependencies
Anda dapat merujuk ke manual Gradle .
Opsi --refresh-dependencies memberi tahu Gradle untuk mengabaikan semua entri yang di-cache untuk modul dan artefak yang diselesaikan. Resolusi baru akan dilakukan terhadap semua repositori yang dikonfigurasi, dengan versi dinamis dihitung ulang, modul di-refresh, dan artefak diunduh.
Anda dapat memberi tahu Gradle untuk mengunduh kembali beberapa dependensi dalam skrip build dengan menandai dependensi sebagai 'berubah'. Gradle kemudian akan memeriksa pembaruan setiap 24 jam, tetapi ini dapat dikonfigurasikan menggunakan resolusinya. Saya merasa berguna untuk menggunakan ini untuk SNAPSHOT atau membangun MALAM.
configurations.all {
// Check for updates every build
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
Diperluas:
dependencies {
implementation group: "group", name: "projectA", version: "1.1-SNAPSHOT", changing: true
}
Kental:
implementation('group:projectA:1.1-SNAPSHOT') { changing = true }
Saya menemukan solusi ini di utas forum ini .
cacheChangingModulesFor
adalah kuncinya, changing: true
bersifat opsional karena tersirat oleh -SNAPSHOT
, mungkin untuk menggunakan singkatan di sini: compile 'group:projectA:1.1-SNAPSHOT'
karena implikasi di atas. Satu juga dapat membatasi resolutionStrategy satu config: configurations.compile.resolutionS...
.
compile 'com.burrowsapps:ads:1.0:true'
?
Untuk Mac
./gradlew build --refresh-dependencies
Untuk Windows
gradlew build --refresh-dependencies
Bisa juga mencoba gradlew assembleDevelopmentDebug --refresh-dependencies
gradle wrapper
tugas; Anda bahkan dapat membuat pembungkus menggunakan pembungkus Gradle lain:gradlew wrapper
Untuk Windows ... untuk membuat unduhan dependensi khusus gradle :
hapus dependensi yang ingin Anda unduh kembali dari direktori di bawah ini:
C:\Users\%USERNAME%\.gradle\caches\modules-2\files-2.1
hapus semua direktori metadata di jalur:
C:\Users\%USERNAME%\.gradle\caches\modules-2\metadata-*
jalankan gradle build
(atau gradlew build
jika menggunakan gradle wrapper) di direktori root proyek.
Catatan: angka-angka di jalur file di atas mungkin berbeda untuk Anda.
Satu dapat menghapus folder dengan stoples cache.
Dalam kasus saya, pada Mac perpustakaan di-cache di path:
/Users/MY_NAME/.gradle/caches/modules-2/files-2.1/cached-library-to-remove
Saya menghapus folder cached library ("cached-library-to-remove" pada contoh di atas), menghapus folder build dari proyek saya dan mengkompilasi lagi. Perpustakaan baru telah diunduh.
Alih-alih menghapus seluruh cache gradle, seperti disarankan beberapa jawaban di sini, Anda dapat menghapus cache untuk grup atau id artefak tertentu. Saya menambahkan fungsi berikut ke .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
}
Pemakaian:
$ deleteGradleCache com.android.support
Kemudian, pada build berikutnya atau jika Anda melakukan sinkronisasi ulang, gradle akan mengunduh ulang dependensi.
Ada 2 cara untuk melakukan itu:
Menggunakan opsi --refresh-dependencies :
./gradlew build --refresh-dependencies
Penjelasan singkat --refresh-dependensi memberi tahu Gradle untuk mengabaikan semua entri yang di-cache untuk modul dan artefak yang diselesaikan.
Penjelasan panjang
Menggunakan delete: Saat Anda menghapus cache
rm -rf $HOME/.gradle/caches/
Anda cukup membersihkan semua stoples dan jumlah cache yang di-cache dan Gradle berada dalam situasi di mana tidak ada artefak pada mesin Anda dan harus mengunduh semuanya. Ya itu akan bekerja 100% untuk pertama kalinya, tetapi ketika SNAPSHOT lain dilepaskan dan itu adalah bagian dari pohon dependensi Anda, Anda akan dihadapkan lagi di depan pilihan untuk menyegarkan atau membersihkan cache.
Ini berhasil untuk saya. Pastikan Gradle tidak diatur ke offline dengan menghapus centang pada File> Pengaturan> Gradle> Offline Work.
Tambahkan ini ke tingkat atas build.gradle Anda, senang memiliki dependensi di atas
configurations.all {
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
Saya memastikan dependensi saya ditulis seperti ini:
implementation('com.github.juanmendez:ThatDependency:ThatBranch-SNAPSHOT') {
changing = true
}
Setelah itu, saya membuka panel Gradle di Android Studio dan klik tombol panah lingkaran biru. Saya selalu dapat melihat pembaruan saya mendapatkan salinan baru.
Untuk Android Studio 3.4.1
Cukup buka tab gradle (dapat ditemukan di kanan) dan klik kanan pada induk dalam daftar (harus disebut "Android"), lalu pilih "Refresh dependencies".
Ini harus menyelesaikan masalah Anda.
Mb Saya terlambat tetapi solusi saya adalah untuk repositori tunggal. Saya pikir menghapus ~ / .gradle / * berlebihan. Masalah yang saya temui adalah saya menghapus direktori tempat source dan gradle mendapatkan versi lain bukan dari nexus. Untuk menghindari itu saya menjalankan yang berikutnya:
~/.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
Setelah itu gradle menyeret file dari nexus.
Untuk menyegarkan versi 'rilis' yang di-cache, satu-satunya pilihan adalah menghapus cache lokal.
rm -rf $HOME/.gradle/caches/
Untuk menyegarkan versi 'snapshot' dalam cache Anda dapat:
./gradlew build --refresh-dependencies
Menghapus semua cache membuat unduhan semua ketergantungan lagi. jadi butuh waktu sangat lama dan itu hal yang membosankan tunggu lagi untuk mengunduh ulang semua ketergantungan.
Bagaimana saya bisa menyelesaikan ini di bawah ini.
Hapus saja grup yang perlu di-refresh.
Mis: jika kita ingin me-refresh grup com.user.test
rm -fr ~/.gradle/caches/modules-2/files-2.1/com.user.test/
kemudian hapus dependensi dari build.gradle dan tambahkan kembali. maka itu akan menyegarkan dependensi apa yang kita inginkan.
Saya pikir gradle 2.14.1 memperbaiki masalah. Jawaban yang diterima benar, tetapi ada bug dalam gradle dengan –refresh-dependencies. 2.14.1 memperbaikinya.
Lihat https://discuss.gradle.org/t/refresh-dependencies-should-use-cachechangingmodulesfor-0s/556
hapus direktori ini:
C:\Users\[username]\.gradle
Untuk sebagian besar kasus, hanya dengan membangun kembali proyek harus melakukan trik. Kadang-kadang Anda harus menjalankan ./gradlew build --refresh-dependencies
karena beberapa jawaban telah disebutkan (butuh waktu lama, tergantung pada seberapa banyak dependensi yang Anda miliki). Bagaimana pun, kadang-kadang tidak satupun dari mereka akan bekerja: ketergantungan tidak akan diperbarui. Kemudian, Anda dapat melakukan ini:
NonExistingClass
alasan)Ini konyol dan sepertinya gila, tetapi saya benar-benar menggunakan prosedur ini setiap hari, hanya karena ketergantungan yang saya butuhkan dapat diperbarui puluhan kali dan tidak ada solusi yang memadai yang akan berpengaruh.
Anda bisa melakukannya seperti ini
https://marschall.github.io/2017/04/17/disabling-gradle-cache.html
Mengutip dari Menonaktifkan Cache Gradle Build
Tembolok bangunan Gradle mungkin menjadi hal yang hebat ketika Anda secara teratur membangun proyek-proyek besar dengan Gradle. Namun ketika hanya sesekali membangun proyek open source, ia dapat dengan cepat menjadi besar.
Untuk menonaktifkan cache build Gradle tambahkan baris berikut ke
~/.gradle/gradle.properties
org.gradle.caching=false
Anda dapat membersihkan cache yang ada dengan
rm -rf $HOME/.gradle/caches/ rm -rf $HOME/.gradle/wrapper/
Jika Anda menggunakan eclipse dan jika Anda ingin memaksa eclipse untuk memuat kembali dependensi Anda dapat mencoba perintah di bawah ini
gradlew clean cleaneclipse build eclipse --refresh-dependencies
Hanya penghapusan manual dari ketergantungan khusus dalam folder cache yang berfungsi ... sebuah artifactory yang dibuat oleh seorang rekan dalam repo perusahaan.
Dalam kasus saya tidak ada yang berhasil, yang saya lakukan adalah:
build.gradle
, mengomentari dependensi terkait dengan impor yang belum terselesaikan yang saya milikiKemudian impor saya diselesaikan dengan benar lagi.
Anda perlu mengunduh ulang, sehingga Anda dapat mengunduh dan mengganti file yang rusak secara manual dan menyinkronkan lagi proyek Anda. Pergi ke lokasi ini C: \ users [username] .gradle \ wrapper \ dist \ gradle3.3-all \ 55gk2rcmfc6p2dg9u9ohc3hw9 \ gradle-3.3-all.zip Di sini hapus gradle3.3allzip dan ganti dengan mengunduh lagi dari situs ini https: / /services.gradle.org/distributions/ Temukan file yang sama dan unduh dan tempel ke lokasi itu Kemudian sinkronkan proyek Anda. Semoga berhasil juga untuk Anda.