Làm thế nào tôi có thể nói với lớp để tải lại các phụ thuộc từ kho lưu trữ?
Làm thế nào tôi có thể nói với lớp để tải lại các phụ thuộc từ kho lưu trữ?
Câu trả lời:
Nói chung, bạn có thể làm mới các phụ thuộc trong bộ đệm của mình bằng tùy chọn dòng lệnh - phụ thuộc vào khung . Bạn cũng có thể xóa các tập tin lưu trữ dưới ~/.gradle/caches
. Với bản dựng tiếp theo, Gradle sẽ cố tải xuống lại.
Trường hợp sử dụng cụ thể của bạn là gì? Bạn có sử dụng phiên bản phụ thuộc động hay phiên bản SNAPSHOT không?
Trên các hệ thống Unix, bạn có thể xóa tất cả các tạo phẩm hiện có (tạo tác và siêu dữ liệu) Gradle đã tải xuống bằng cách sử dụng:
rm -rf $HOME/.gradle/caches/
find $HOME/.gradle/caches/ -name "*LIBRARY_NAME*" -exec rm -r {} \;
Nếu bạn đang sử dụng một phiên bản Gradle gần đây, bạn có thể sử dụng tùy chọn --refresh-phụ thuộc.
./gradlew build --refresh-dependencies
bạn có thể tham khảo hướng dẫn sử dụng Gradle .
Tùy chọn --refresh-phụ thuộc yêu cầu Gradle bỏ qua tất cả các mục được lưu trong bộ nhớ cache cho các mô-đun và tạo tác được giải quyết. Một quyết định mới sẽ được thực hiện đối với tất cả các kho lưu trữ được định cấu hình, với các phiên bản động được tính toán lại, các mô-đun được làm mới và các tạo phẩm được tải xuống.
Bạn có thể yêu cầu Gradle tải xuống lại một số phụ thuộc trong tập lệnh xây dựng bằng cách gắn cờ phụ thuộc là 'thay đổi'. Gradle sau đó sẽ kiểm tra các bản cập nhật cứ sau 24 giờ, nhưng điều này có thể được cấu hình bằng cách sử dụng DSL độ phân giải. Tôi thấy hữu ích khi sử dụng điều này cho các bản dựng SNAPSHOT hoặc NIGHTLY.
configurations.all {
// Check for updates every build
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
Mở rộng:
dependencies {
implementation group: "group", name: "projectA", version: "1.1-SNAPSHOT", changing: true
}
Ngưng tụ:
implementation('group:projectA:1.1-SNAPSHOT') { changing = true }
Tôi tìm thấy giải pháp này tại chủ đề diễn đàn này .
cacheChangingModulesFor
là chìa khóa, changing: true
là tùy chọn vì nó ngụ ý -SNAPSHOT
, có thể sử dụng tốc ký ở đây: compile 'group:projectA:1.1-SNAPSHOT'
vì hàm ý trên. Người ta cũng có thể giới hạn độ phân giảiStrargety thành một cấu hình : configurations.compile.resolutionS...
.
compile 'com.burrowsapps:ads:1.0:true'
?
Dành cho MAC
./gradlew build --refresh-dependencies
Cho cửa sổ
gradlew build --refresh-dependencies
Cũng có thể thử gradlew assembleDevelopmentDebug --refresh-dependencies
gradle wrapper
tác vụ bằng cách sử dụng ; bạn thậm chí có thể tạo một trình bao bọc bằng cách sử dụng trình bao bọc Gradle khác:gradlew wrapper
Đối với Windows ... để thực hiện tải lại phụ thuộc cụ thể :
xóa các phụ thuộc bạn muốn tải xuống lại từ thư mục dưới đây:
C:\Users\%USERNAME%\.gradle\caches\modules-2\files-2.1
xóa tất cả các thư mục siêu dữ liệu tại đường dẫn:
C:\Users\%USERNAME%\.gradle\caches\modules-2\metadata-*
chạy gradle build
(hoặc gradlew build
nếu sử dụng lớp bao bọc) trong thư mục gốc của dự án.
lưu ý: các số trong đường dẫn tệp ở trên có thể khác nhau đối với bạn.
Người ta có thể loại bỏ thư mục với các lọ được lưu trữ.
Trong trường hợp của tôi, trên Mac , thư viện đã được lưu trong đường dẫn:
/Users/MY_NAME/.gradle/caches/modules-2/files-2.1/cached-library-to-remove
Tôi đã xóa thư mục thư viện được lưu trong bộ nhớ cache ("bộ nhớ cache-thư viện để xóa" trong ví dụ trên), xóa thư mục xây dựng của dự án của tôi và biên dịch lại. Thư viện mới đã được tải về.
Thay vì xóa toàn bộ bộ đệm của lớp, như một số câu trả lời ở đây đang gợi ý, bạn có thể xóa bộ đệm cho một nhóm hoặc id tạo tác cụ thể. Tôi đã thêm chức năng sau vào .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
}
Sử dụng:
$ deleteGradleCache com.android.support
Sau đó, trên bản dựng tiếp theo hoặc nếu bạn đồng bộ lại, lớp sẽ tải lại phụ thuộc.
Có 2 cách để làm điều đó:
Sử dụng tùy chọn --refresh-phụ thuộc :
./gradlew build --refresh-dependencies
Giải thích ngắn - tùy chọn phụ thuộc vào khung sẽ cho Gradle bỏ qua tất cả các mục được lưu trong bộ nhớ cache cho các mô-đun và tạo tác được giải quyết.
Giải thích dài
Sử dụng xóa: Khi bạn xóa bộ nhớ cache
rm -rf $HOME/.gradle/caches/
Bạn chỉ cần dọn dẹp tất cả các lọ được lưu trong bộ nhớ cache và tổng sha1 và Gradle trong tình huống không có tạo tác nào trên máy của bạn và phải tải xuống mọi thứ. Có, nó sẽ hoạt động 100% lần đầu tiên, nhưng khi một SNAPSHOT khác được phát hành và nó là một phần của cây phụ thuộc của bạn, bạn sẽ phải đối mặt một lần nữa trước sự lựa chọn để làm mới hoặc xóa bộ nhớ cache.
Điều này làm việc cho tôi. Đảm bảo Gradle không được đặt thành ngoại tuyến bằng cách bỏ chọn nút tại Tệp> Cài đặt> Lớp> Công việc ngoại tuyến.
Thêm phần này vào cấp cao nhất của build.gradle của bạn, thật tuyệt khi có các phụ thuộc ở trên
configurations.all {
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
Tôi chắc chắn rằng các phụ thuộc của tôi được viết như thế này:
implementation('com.github.juanmendez:ThatDependency:ThatBranch-SNAPSHOT') {
changing = true
}
Sau đó, tôi mở bảng điều khiển Gradle trong Android Studio và nhấp vào nút mũi tên vòng tròn màu xanh. Tôi luôn có thể thấy các cập nhật của mình nhận được một bản sao mới.
Dành cho Android Studio 3.4.1
Chỉ cần mở tab gradle (có thể nằm ở bên phải) và nhấp chuột phải vào cha mẹ trong danh sách (nên được gọi là "Android"), sau đó chọn "Làm mới phụ thuộc".
Điều này sẽ giải quyết vấn đề của bạn.
Mb Tôi đã quá muộn tuy nhiên giải pháp của tôi là dành cho kho lưu trữ duy nhất. Tôi nghĩ việc xóa ~ / .gradle / * là quá mức cần thiết. Điều đáng tiếc tôi gặp phải là tôi đang xóa thư mục nơi các nguồn và lớp đang nhận được một phiên bản khác không phải từ nexus. Để tránh điều đó tôi chạy tiếp:
~/.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
Sau đó lớp đang kéo các tập tin từ nexus.
Để làm mới phiên bản 'phát hành' được lưu trong bộ nhớ cache, tùy chọn duy nhất là xóa bộ đệm cục bộ.
rm -rf $HOME/.gradle/caches/
Để làm mới phiên bản 'snapshot' được lưu trong bộ nhớ cache, bạn có thể:
./gradlew build --refresh-dependencies
Xóa tất cả các bộ nhớ cache làm cho tải xuống tất cả các phụ thuộc một lần nữa. Vì vậy, phải mất một thời gian dài và điều nhàm chán là chờ đợi một lần nữa để tải lại tất cả các phụ thuộc.
Bao giờ tôi có thể giải quyết điều này dưới đây.
Chỉ cần xóa các nhóm cần được làm mới.
Ví dụ: nếu chúng tôi muốn làm mới nhóm com.user.test
rm -fr ~/.gradle/caches/modules-2/files-2.1/com.user.test/
sau đó loại bỏ sự phụ thuộc khỏi build.gradle và thêm nó. sau đó nó sẽ làm mới phụ thuộc những gì chúng ta muốn.
Tôi nghĩ rằng lớp 2.14.1 khắc phục vấn đề. Câu trả lời được chấp nhận là chính xác, nhưng có một lỗi trong lớp với phụ thuộc củarerefresh. 2.14.1 sửa lỗi đó.
Xem https://discuss.gradle.org/t/refresh-dependencies-should-use-cachechangingmodulesfor-0s/556
Đối với phần lớn các trường hợp, chỉ cần xây dựng lại dự án nên thực hiện thủ thuật. Đôi khi bạn phải chạy ./gradlew build --refresh-dependencies
như một số câu trả lời đã được đề cập (mất nhiều thời gian, tùy thuộc vào mức độ phụ thuộc của bạn). Tuy nhiên, đôi khi không ai trong số họ sẽ làm việc: sự phụ thuộc sẽ không được cập nhật. Sau đó, bạn có thể làm điều này:
NonExistingClass
lý do)Điều này thật vô lý và có vẻ như điên rồ, nhưng tôi thực sự sử dụng quy trình này hàng ngày, đơn giản vì sự phụ thuộc tôi cần có thể được cập nhật hàng chục lần và không có giải pháp thích hợp nào có hiệu lực.
Bạn có thể làm như thế này
https://marschall.github.io/2017/04/17/disabling-gradle-cache.html
Để trích dẫn từ Vô hiệu hóa bộ đệm ẩn Gradle Build
Bộ đệm xây dựng Gradle có thể là một điều tuyệt vời khi bạn thường xuyên xây dựng> các dự án lớn với Gradle. Tuy nhiên, khi chỉ thỉnh thoảng xây dựng các dự án nguồn mở> nó có thể nhanh chóng trở nên lớn.
Để vô hiệu hóa bộ đệm xây dựng Gradle, thêm dòng sau vào
~/.gradle/gradle.properties
org.gradle.caching=false
Bạn có thể xóa bộ nhớ cache hiện có với
rm -rf $HOME/.gradle/caches/ rm -rf $HOME/.gradle/wrapper/
Nếu bạn đang sử dụng nhật thực và nếu bạn muốn buộc nhật thực tải lại các phụ thuộc, bạn có thể thử lệnh bên dưới
gradlew clean cleaneclipse build eclipse --refresh-dependencies
Trong trường hợp của tôi, không có cách nào ở trên hoạt động, điều tôi đã làm là:
build.gradle
, nhận xét các phụ thuộc liên quan đến hàng nhập khẩu chưa được giải quyết mà tôi cóSau đó, hàng nhập khẩu của tôi đã được giải quyết một lần nữa.
Bạn cần tải xuống lại, để bạn có thể tải xuống và thay thế tệp bị hỏng theo cách thủ công và đồng bộ lại dự án của bạn. Đến vị trí này C: \ users [username] .gradle \ wrapper \ TP \ gradle3.3-tất cả \ 55gk2rcmfc6p2dg9u9ohc3hw9 \ gradle-3.3-all.zip Đây gradle3.3allzip xóa và thay thế nó bằng cách tải lại từ trang web này https: / /service.gradle.org/distribution/ Tìm cùng một tệp và tải xuống và dán nó vào vị trí đó Sau đó đồng bộ hóa dự án của bạn. Hi vọng nó có ích cho bạn.