मैं रिपॉजिटरी से निर्भरता को कम करने के लिए कैसे वर्गीकृत कर सकता हूं?
मैं रिपॉजिटरी से निर्भरता को कम करने के लिए कैसे वर्गीकृत कर सकता हूं?
जवाबों:
आम तौर पर, आप कमांड लाइन विकल्प --refresh- निर्भरता के साथ अपने कैश में निर्भरता को ताज़ा कर सकते हैं । आप के तहत कैश्ड फ़ाइलों को भी हटा सकते हैं ~/.gradle/caches
। अगले बिल्ड के साथ ग्रेडल उन्हें फिर से डाउनलोड करने का प्रयास करेगा।
आपका विशिष्ट उपयोग मामला क्या है? क्या आप डायनेमिक निर्भरता संस्करणों या स्नैपशॉट संस्करणों का उपयोग करते हैं?
यूनिक्स प्रणालियों पर, आप सभी मौजूदा कलाकृतियों (कलाकृतियों और मेटाडेटा) को हटा सकते हैं। ग्रेडल ने इसका उपयोग किया है:
rm -rf $HOME/.gradle/caches/
find $HOME/.gradle/caches/ -name "*LIBRARY_NAME*" -exec rm -r {} \;
यदि आप ग्रैडल के हालिया संस्करण का उपयोग कर रहे हैं, तो आप --refresh- निर्भरता विकल्प का उपयोग कर सकते हैं।
./gradlew build --refresh-dependencies
आप ग्रेड मैनुअल का उल्लेख कर सकते हैं ।
--Refresh- निर्भरता विकल्प ग्रैडल को हल मॉड्यूल और कलाकृतियों के लिए सभी कैश्ड प्रविष्टियों को अनदेखा करने के लिए कहता है। एक नया रिज़ॉल्यूशन सभी कॉन्फ़िगर किए गए रिपॉजिटरी के खिलाफ किया जाएगा, जिसमें डायनामिक वर्जन पुनर्गणित, मॉड्यूल्स रिफ्रेश और डाउनलोड की गई कलाकृतियां होंगी।
आप ग्रेडल को निर्भरता को 'बदलते' के रूप में चिह्नित करके बिल्ड स्क्रिप्ट में कुछ निर्भरता को फिर से डाउनलोड करने के लिए कह सकते हैं। ग्रैडल हर 24 घंटे में अपडेट की जाँच करेगा, लेकिन इसे रेजोल्यूशनस्ट्रीट्टी डीएसएल का उपयोग करके कॉन्फ़िगर किया जा सकता है। मैं इसे स्नैपशॉट या नाइटली बिल्ड के लिए उपयोग करना उपयोगी समझता हूं।
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'
उपरोक्त निहितार्थ के कारण। एक भी संकल्प को एक विन्यास में प्रतिबंधित कर सकता है configurations.compile.resolutionS...
:।
compile 'com.burrowsapps:ads:1.0:true'
?
मैक के लिए
./gradlew build --refresh-dependencies
विंडोज के लिए
gradlew build --refresh-dependencies
भी आजमा सकते हैं gradlew assembleDevelopmentDebug --refresh-dependencies
gradle wrapper
कार्य उत्पन्न कर सकते हैं ; तुम भी एक और gradlew wrapper
Windows के लिए ... क्रमिक पुन: डाउनलोड करने के लिए विशिष्ट निर्भरताएँ बनाने के लिए:
नीचे दी गई निर्देशिका से पुन: डाउनलोड करने के लिए निर्भरताएँ हटाएँ:
C:\Users\%USERNAME%\.gradle\caches\modules-2\files-2.1
रास्ते में सभी मेटाडेटा निर्देशिकाओं को हटाएं :
C:\Users\%USERNAME%\.gradle\caches\modules-2\metadata-*
प्रोजेक्ट के रूट डायरेक्टरी में रन gradle build
(या gradlew build
अगर ग्रेडर रैपर का उपयोग करते हैं)।
नोट: उपरोक्त फ़ाइल पथों की संख्याएँ आपके लिए भिन्न हो सकती हैं।
एक कैश्ड जार के साथ फ़ोल्डर को हटा सकता है।
मेरे मामले में, मैक पर पुस्तकालय को रास्ते में कैश किया गया था:
/Users/MY_NAME/.gradle/caches/modules-2/files-2.1/cached-library-to-remove
मैंने कैश्ड लाइब्रेरी फ़ोल्डर ("कैश्ड-लाइब्रेरी-टू-रिमूव" को उपरोक्त उदाहरण में हटा दिया), अपने प्रोजेक्ट के बिल्ड फ़ोल्डर को हटा दिया और फिर से संकलित किया। ताजा पुस्तकालय तब डाउनलोड किया गया था।
अपना संपूर्ण ग्रेड कैश निकालने के बजाय, जैसे कि यहां कुछ उत्तर सुझा रहे हैं, आप किसी विशिष्ट समूह या विरूपण साक्ष्य आईडी के लिए कैश हटा सकते हैं। मैंने निम्नलिखित फंक्शन को अपने साथ जोड़ा .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
फिर, अगले बिल्ड पर या यदि आप फिर से सिंक करते हैं, तो निर्भरता फिर से डाउनलोड हो जाएगी।
ऐसा करने के 2 तरीके हैं:
--Refresh- निर्भरता विकल्प का उपयोग करना :
./gradlew build --refresh-dependencies
संक्षिप्त विवरण - क्रेफ़ेश-डिपेंडेंसी विकल्प ग्रैडल को हल किए गए मॉड्यूल और कलाकृतियों के लिए सभी कैश्ड प्रविष्टियों को अनदेखा करने के लिए कहता है।
लंबी व्याख्या
Delete का उपयोग करना: जब आप caches को हटाते हैं
rm -rf $HOME/.gradle/caches/
आप बस सभी कैश्ड जार और sha1 sums को साफ करते हैं और ग्रेडल ऐसी स्थिति में है जहां आपकी मशीन पर कोई कलाकृतियां नहीं हैं और सब कुछ डाउनलोड करना है। हां यह पहली बार 100% काम करेगा, लेकिन जब एक और स्नैपशॉट जारी किया जाता है और यह आपकी निर्भरता के पेड़ का हिस्सा होता है तो आपको फिर से ताज़ा करने या कैश को शुद्ध करने के विकल्प के सामने पेश किया जाएगा।
इसने मेरे लिए काम किया। सुनिश्चित करें कि फ़ाइल> सेटिंग्स> ग्रेडल> ऑफ़लाइन कार्य पर बटन को अनचेक करके ऑफ़लाइन ग्रेड सेट नहीं किया गया है।
अपने build.gradle के शीर्ष स्तर पर इसे जोड़ें, निर्भरता के ऊपर अच्छा है
configurations.all {
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
मैंने सुनिश्चित किया कि मेरी निर्भरताएं इस तरह लिखी गई हैं:
implementation('com.github.juanmendez:ThatDependency:ThatBranch-SNAPSHOT') {
changing = true
}
इसके बाद, मैं एंड्रॉइड स्टूडियो में ग्रेड पैनल खोलता हूं और नीले सर्कल के तीर बटन पर क्लिक करता हूं। मैं हमेशा अपने अपडेट को एक नई ताज़ा प्रतिलिपि प्राप्त करते हुए देख सकता हूँ।
एंड्रॉइड स्टूडियो के लिए 3.4.1
बस ग्रेड टैब खोलें (दाईं ओर स्थित हो सकता है) और सूची में माता-पिता पर राइट-क्लिक करें (इसे "एंड्रॉइड" कहा जाना चाहिए), फिर "रिफ्रेश निर्भरता" चुनें।
इससे आपकी समस्या का समाधान होना चाहिए।
एमबी मैं बहुत देर हो चुकी हूं लेकिन मेरा समाधान एकल रिपॉजिटरी के लिए है। मुझे लगता है कि डिलीट करना ~ / .gradle / * ओवरकिल है। मैं जिस संभावना से टकरा रहा था, वह यह था कि मैं निर्देशिका को हटा रहा था जहां स्रोत थे और ग्रेडेल को नेक्सस से नहीं एक और संस्करण मिल रहा था। इससे बचने के लिए कि मैं अगला भाग:
~/.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
उसके बाद ग्रेडल नेक्सस से फाइलों को खींच रहा है।
कैश्ड 'रिलीज़' संस्करण को रीफ्रेश करने के लिए स्थानीय कैश को साफ़ करना एकमात्र विकल्प है।
rm -rf $HOME/.gradle/caches/
कैश्ड 'स्नैपशॉट' संस्करण को ताज़ा करने के लिए:
./gradlew build --refresh-dependencies
सभी कैश को हटाने से सभी आश्रितों को फिर से डाउनलोड करना पड़ता है। इसलिए इसमें इतना समय लगता है और सभी आश्रितों को फिर से डाउनलोड करने के लिए यह फिर से उबाऊ बात है।
कैसे मैं कभी भी इस तरह से हल करने में सक्षम हो सकता है।
बस उन समूहों को हटा दें जिन्हें ताज़ा करने की आवश्यकता है।
Ex: यदि हम com.user.test ग्रुप को रिफ्रेश करना चाहते हैं
rm -fr ~/.gradle/caches/modules-2/files-2.1/com.user.test/
फिर build.gradle से निर्भरता को हटा दें और इसे पुनः जोड़ें। तो यह निर्भरता को ताज़ा करेगा कि हम क्या चाहते हैं।
मुझे लगता है कि २.१४.१ की समस्या को हल करता है। स्वीकृत उत्तर सही है, लेकिन -फ्रेश-निर्भरता के साथ श्रेणी में एक बग है। 2.14.1 इसे ठीक करता है।
Https://discuss.gradle.org/t/refresh-d 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/gradle.properties
org.gradle.caching=false
आप मौजूदा कैश को इससे साफ़ कर सकते हैं
rm -rf $HOME/.gradle/caches/ rm -rf $HOME/.gradle/wrapper/
यदि आप ग्रहण का उपयोग कर रहे हैं और यदि आप चाहते हैं कि आप ग्रहण निर्भरता को फिर से लागू करने के लिए बल प्रयोग कर सकते हैं, तो आप नीचे दिए गए आदेश को आजमा सकते हैं
gradlew clean cleaneclipse build eclipse --refresh-dependencies
कैश फ़ोल्डर में विशिष्ट निर्भरता का केवल एक मैनुअल विलोपन काम करता है ... उद्यम रेपो में एक सहकर्मी द्वारा बनाया गया एक आर्टिफैक्ट।
मेरे मामले में उपरोक्त में से किसी ने भी काम नहीं किया, जो मैंने किया:
build.gradle
, मेरे द्वारा किए गए अनसुलझे आयातों से संबंधित निर्भरता पर टिप्पणी करनाफिर मेरा आयात फिर से ठीक से हल हो गया।
आपको इसे फिर से डाउनलोड करने की आवश्यकता है, इसलिए आप दूषित फ़ाइल को मैन्युअल रूप से डाउनलोड और बदल सकते हैं और फिर से अपनी परियोजना को सिंक कर सकते हैं। इस स्थान पर जाएं C: \ users [उपयोगकर्ता नाम] .gradle \ आवरण \ dist \ gradle3.3-all \ 55gk2rcmfc6p2dg9u9ohc3hw9 \ gradle-3.3-all.zip यहाँ gradle3.3allzip हटाएं और इसे फिर से इस साइट से डाउनलोड करके प्रतिस्थापित करें https: / /services.gradle.org/distributions/ समान फ़ाइल ढूंढें और उसे उस स्थान पर डाउनलोड करें और पेस्ट करें और फिर अपनी परियोजना सिंक करें। उम्मीद है कि यह आपके लिए भी उपयोगी होगा।