ฉันจะบอกให้ gradle ทำการดาวน์โหลดการพึ่งพาจากคลังเก็บซ้ำได้อย่างไร
ฉันจะบอกให้ gradle ทำการดาวน์โหลดการพึ่งพาจากคลังเก็บซ้ำได้อย่างไร
คำตอบ:
โดยทั่วไปแล้วคุณสามารถฟื้นฟูการอ้างอิงในแคชของคุณมีตัวเลือกบรรทัดคำสั่ง--refresh-อ้างอิง ~/.gradle/caches
นอกจากนี้คุณยังสามารถลบไฟล์ที่เก็บไว้ภายใต้ ด้วยการสร้าง Gradle ครั้งต่อไปจะพยายามดาวน์โหลดอีกครั้ง
กรณีการใช้งานเฉพาะของคุณคืออะไร? คุณใช้เวอร์ชันการพึ่งพาแบบไดนามิกหรือเวอร์ชัน SNAPSHOT หรือไม่
บนระบบ Unix คุณสามารถลบส่วนที่มีอยู่ทั้งหมด (ส่วนและข้อมูลเมตา) Gradle ได้ดาวน์โหลดโดยใช้:
rm -rf $HOME/.gradle/caches/
find $HOME/.gradle/caches/ -name "*LIBRARY_NAME*" -exec rm -r {} \;
หากคุณใช้ Gradle รุ่นล่าสุดคุณสามารถใช้ตัวเลือก --refresh-dependencies
./gradlew build --refresh-dependencies
คุณสามารถดูที่คู่มือ Gradle
ตัวเลือก --refresh-dependencies บอกให้ Gradle ละเว้นรายการแคชทั้งหมดสำหรับโมดูลและส่วนที่ได้รับการแก้ไข การแก้ไขใหม่จะดำเนินการกับที่เก็บข้อมูลที่กำหนดค่าไว้ทั้งหมดพร้อมการคำนวณรุ่นแบบไดนามิกการรีเฟรชโมดูลและการดาวน์โหลดสิ่งประดิษฐ์
คุณสามารถบอก Gradle ให้ดาวน์โหลดการอ้างอิงบางอย่างในสคริปต์การสร้างอีกครั้งโดยตั้งค่าสถานะการพึ่งพาว่า 'เปลี่ยนแปลง' Gradle จะตรวจสอบการอัปเดตทุก ๆ 24 ชั่วโมง แต่สิ่งนี้สามารถกำหนดค่าได้โดยใช้ resolutionStrategy DSL ฉันพบว่ามีประโยชน์ในการใช้สิ่งนี้สำหรับการสร้าง SNAPSHOT หรือ NIGHTLY
configurations.all {
// Check for updates every build
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
ขยาย:
dependencies {
implementation group: "group", name: "projectA", version: "1.1-SNAPSHOT", changing: true
}
ย่อ:
implementation('group:projectA:1.1-SNAPSHOT') { changing = true }
ฉันพบโซลูชันนี้ที่กระทู้ในฟอรัมนี้
cacheChangingModulesFor
เป็นกุญแจchanging: true
เป็นทางเลือกเพราะมันบอกเป็นนัยโดย-SNAPSHOT
เป็นไปได้ที่จะใช้ชวเลขที่นี่: compile 'group:projectA:1.1-SNAPSHOT'
เนื่องจากความหมายข้างต้น หนึ่งยังสามารถ จำกัด การ resolutionStrategy configurations.compile.resolutionS...
ให้เป็นหนึ่งในการกำหนดค่า:
compile 'com.burrowsapps:ads:1.0:true'
?
สำหรับ MAC
./gradlew build --refresh-dependencies
สำหรับ Windows
gradlew build --refresh-dependencies
สามารถลองได้ gradlew assembleDevelopmentDebug --refresh-dependencies
gradle wrapper
งาน คุณสามารถสร้าง wrapper โดยใช้ wrapper Gradle อีกอันหนึ่งได้gradlew wrapper
สำหรับ Windows ... เพื่อให้ gradle ดาวน์โหลดการอ้างอิงเฉพาะอีกครั้ง:
ลบการอ้างอิงที่คุณต้องการดาวน์โหลดอีกครั้งจากไดเรกทอรีด้านล่าง:
C:\Users\%USERNAME%\.gradle\caches\modules-2\files-2.1
ลบไดเรกทอรีข้อมูลเมตาทั้งหมดที่เส้นทาง:
C:\Users\%USERNAME%\.gradle\caches\modules-2\metadata-*
run gradle build
(หรือgradlew build
ถ้าใช้ gradle wrapper) ในไดเรกทอรีรากของโครงการ
หมายเหตุ: ตัวเลขในพา ธ ของไฟล์ด้านบนอาจแตกต่างกันสำหรับคุณ
หนึ่งสามารถลบโฟลเดอร์ที่มีขวดแคช
ในกรณีของฉันบน Macไลบรารีถูกแคชที่พา ธ :
/Users/MY_NAME/.gradle/caches/modules-2/files-2.1/cached-library-to-remove
ฉันลบโฟลเดอร์ไลบรารีแคช ("ตัวอย่างแคชไลบรารีเพื่อลบ" ในตัวอย่างด้านบน) ลบโฟลเดอร์บิลด์ของโครงการของฉันและคอมไพล์อีกครั้ง ห้องสมุดสดถูกดาวน์โหลดแล้ว
แทนการลบแคช gradle ทั้งหมดของคุณเช่นเดียวกับคำตอบบางอย่างที่แนะนำคุณสามารถลบแคชสำหรับกลุ่มหรือรหัสสิ่งประดิษฐ์ที่เฉพาะเจาะจงได้ ฉันได้เพิ่มฟังก์ชั่นต่อไปนี้ในของฉัน.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
}
การใช้งาน:
$ deleteGradleCache com.android.support
จากนั้นในบิลด์ถัดไปหรือหากคุณซิงค์อีกครั้ง Gradle จะดาวน์โหลดการอ้างอิงอีกครั้ง
มี 2 วิธีในการทำเช่นนั้น:
ใช้-ตัวเลือกการอ้างอิงสดชื่น :
./gradlew build --refresh-dependencies
คำอธิบายสั้น ๆ - ตัวเลือกการอ้างอิงแบบรีเฟรชบอกให้ Gradle ละเว้นรายการแคชทั้งหมดสำหรับโมดูลและส่วนที่ได้รับการแก้ไข
คำอธิบายยาว ๆ
ใช้ลบ: เมื่อคุณลบแคช
rm -rf $HOME/.gradle/caches/
คุณเพียงแค่ทำความสะอาดขวดที่เก็บไว้ทั้งหมดและผลรวม sha1 และ Gradle อยู่ในสถานการณ์ที่ไม่มีสิ่งประดิษฐ์ในเครื่องของคุณและต้องดาวน์โหลดทุกอย่าง ใช่มันจะใช้งานได้ 100% เป็นครั้งแรก แต่เมื่อมีการปล่อย SNAPSHOT อื่นและเป็นส่วนหนึ่งของแผนภูมิการพึ่งพาของคุณคุณจะต้องเผชิญหน้าอีกครั้งต่อหน้าตัวเลือกเพื่อรีเฟรชหรือล้างแคช
สิ่งนี้ใช้ได้สำหรับฉัน ตรวจสอบให้แน่ใจว่า Gradle ไม่ได้ถูกตั้งเป็นออฟไลน์โดยปุ่มยกเลิกการเลือกที่ไฟล์> การตั้งค่า> Gradle> ออฟไลน์ที่ทำงาน
เพิ่มสิ่งนี้ลงในระดับบนสุดของ build.gradle ของคุณซึ่งดีต่อการพึ่งพา
configurations.all {
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
ฉันทำให้แน่ใจว่าการอ้างอิงของฉันถูกเขียนเช่นนี้
implementation('com.github.juanmendez:ThatDependency:ThatBranch-SNAPSHOT') {
changing = true
}
หลังจากนั้นฉันเปิดแผง Gradle ใน Android Studio และคลิกปุ่มลูกศรวงกลมสีน้ำเงิน ฉันสามารถเห็นการอัปเดตของฉันเพื่อรับสำเนาใหม่เสมอ
วิธีการแก้ปัญหาข้างต้นไม่ได้ผลสำหรับฉัน
หากคุณใช้ IntelliJ สิ่งที่แก้ไขได้สำหรับฉันคือการรีเฟรชโครงการ Gradle ทั้งหมด:
สำหรับผู้ที่สงสัยว่าจะใช้คำสั่ง gradle ได้ที่ไหน:
gradlew build --refresh-dependencies
สำหรับ Android Studio 3.4.1
เพียงเปิดแท็บการไล่ระดับสี (สามารถอยู่ทางด้านขวา) และคลิกขวาบนพาเรนต์ในรายการ (ควรเรียกว่า "Android") จากนั้นเลือก "รีเฟรชการอ้างอิง"
การดำเนินการนี้ควรแก้ไขปัญหาของคุณ
Mb ฉันสายเกินไป แต่โซลูชันของฉันใช้สำหรับที่เก็บเดียว ฉันคิดว่าการลบ ~ / .gradle / * มากเกินไป problmem ที่ฉันชนคือว่าฉันลบไดเรกทอรีที่แหล่งที่มาและ gradle ได้รับรุ่นอื่นไม่ได้จาก Nexus เพื่อหลีกเลี่ยงการที่ฉันเรียกใช้ต่อไป:
~/.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
หลังจาก gradle นั้นกำลังลากไฟล์จาก nexus
หากต้องการรีเฟรชเวอร์ชัน 'ปล่อย' แคชตัวเลือกเดียวคือการล้างแคชในตัวเครื่อง
rm -rf $HOME/.gradle/caches/
หากต้องการรีเฟรชเวอร์ชัน 'ภาพรวม' ที่แคชไว้คุณสามารถ:
./gradlew build --refresh-dependencies
การลบแคชทั้งหมดทำให้ดาวน์โหลดการอ้างอิงทั้งหมดอีกครั้ง ดังนั้นจึงใช้เวลานานมากและเป็นเรื่องน่าเบื่อรออีกครั้งเพื่อดาวน์โหลดการพึ่งพาทั้งหมด
ฉันจะสามารถแก้ไขวิธีด้านล่างนี้ได้อย่างไร
เพียงลบกลุ่มที่ต้องรีเฟรช
เช่นถ้าเราต้องการรีเฟรชกลุ่มcom.user.test
rm -fr ~/.gradle/caches/modules-2/files-2.1/com.user.test/
จากนั้นลบการพึ่งพาจาก build.gradle และเพิ่มใหม่ จากนั้นมันจะรีเฟรชการพึ่งพาสิ่งที่เราต้องการ
ฉันคิดว่า gradle 2.14.1 แก้ไขปัญหาได้ คำตอบที่ยอมรับนั้นถูกต้อง แต่มีข้อบกพร่องในการไล่ระดับด้วย –refresh-dependencies 2.14.1 แก้ไขว่า
ดูhttps://discuss.gradle.org/t/refresh-dependencies-should-use-cachechangingmodulesfor-0s/556
ลบไดเรกทอรีนี้:
C:\Users\[username]\.gradle
สำหรับกรณีส่วนใหญ่เพียงแค่สร้างโครงการขึ้นมาใหม่ควรทำสิ่งที่หลอกลวง บางครั้งคุณต้องเรียกใช้./gradlew build --refresh-dependencies
ตามคำตอบหลายข้อที่ได้กล่าวไปแล้ว (ใช้เวลานานขึ้นอยู่กับจำนวนการพึ่งพาของคุณ) เท่าที่เคยมีมาบางครั้งก็ไม่มีใครทำงาน: การพึ่งพาก็จะไม่ได้รับการปรับปรุง จากนั้นคุณสามารถทำสิ่งนี้:
NonExistingClass
เหตุผล)มันไร้สาระและดูเหมือนว่าบ้า แต่จริง ๆ แล้วฉันใช้ขั้นตอนนี้ทุกวันเพียงเพราะการพึ่งพาที่ฉันต้องการสามารถอัปเดตหลายสิบครั้งและไม่มีวิธีแก้ปัญหาที่เพียงพอจะมีผลใด ๆ
คุณสามารถทำได้เช่นนี้
https://marschall.github.io/2017/04/17/disabling-gradle-cache.html
อ้างจากการปิดการใช้งาน Gradle Build Cache
การสร้างแคชของ Gradle อาจเป็นสิ่งที่ดีเมื่อคุณสร้างโครงการขนาดใหญ่ที่มี Gradle เป็นประจำ อย่างไรก็ตามเมื่อสร้างโครงการโอเพนซอร์ซเป็นครั้งคราวเท่านั้น
หากต้องการปิดใช้งานแคชการสร้าง Gradle ให้เพิ่มบรรทัดต่อไปนี้
~/.gradle/gradle.properties
org.gradle.caching=false
คุณสามารถล้างแคชที่มีอยู่ด้วย
rm -rf $HOME/.gradle/caches/ rm -rf $HOME/.gradle/wrapper/
หากคุณกำลังใช้ eclipse และหากคุณต้องการบังคับให้ eclipse โหลดการขึ้นต่อกันอีกครั้งคุณสามารถลองคำสั่งด้านล่าง
gradlew clean cleaneclipse build eclipse --refresh-dependencies
เฉพาะการลบการอ้างอิงเฉพาะในโฟลเดอร์แคชด้วยตนเองเท่านั้นที่ใช้งานได้ ... สิ่งประดิษฐ์ที่สร้างขึ้นโดยเพื่อนร่วมงานใน repo ขององค์กร
ในกรณีของฉันไม่มีการทำงานใด ๆ ข้างต้นสิ่งที่ฉันทำคือ
build.gradle
แสดงความคิดเห็นการอ้างอิงที่เกี่ยวข้องกับการนำเข้าที่ยังไม่ได้แก้ไขที่ฉันมีจากนั้นการนำเข้าของฉันได้รับการแก้ไขอย่างเหมาะสมอีกครั้ง
คุณต้องดาวน์โหลดใหม่เพื่อให้คุณสามารถดาวน์โหลดและแทนที่ไฟล์ที่เสียหายด้วยตนเองและทำการซิงค์โครงการของคุณอีกครั้ง ไปที่ตำแหน่งนี้ C: \ users [ชื่อผู้ใช้] .gradle \ wrapper \ dist \ gradle3.3-all \ 55gk2rcmfc6p2dg9u9ohc3hw9 \ gradle-3.3-all.zip ที่นี่ลบ gradle3.3allzip และแทนที่ด้วยการดาวน์โหลดอีกครั้งจากเว็บไซต์นี้ https: / /services.gradle.org/distribution/ ค้นหาไฟล์เดียวกันและดาวน์โหลดและวางลงในตำแหน่งนั้นจากนั้นซิงค์โครงการของคุณ หวังว่ามันจะเหมาะกับคุณเช่นกัน