2015-04-23 3 views
23

अब तक मैं अपने build.gradleमैं फ़ाइल को हटाने के लिए ग्रेडल के क्लीन कार्य को कैसे बढ़ा सकता हूं?

apply plugin: 'base' 
clean << { 
    delete '${rootDir}/api-library/auto-generated-classes/' 
    println '${rootDir}/api-library/auto-generated-classes/' 
} 

हालांकि यह न केवल मेरी फाइल को हटाया नहीं गया है के लिए निम्न चुके हैं, लेकिन प्रिंट बयान से पता चलता है कि ${rootDir} अपने प्रोजेक्ट की रूट निर्देशिका में परिवर्तित नहीं किया जा रहा है। यह काम क्यों नहीं करेगा, मुझे कौन सी अवधारणाएं याद आ रही हैं?

उत्तर

32

आपको केवल डबल कोट्स का उपयोग करने की आवश्यकता है। साथ ही, << ड्रॉप करें और इसके बजाय doFirst का उपयोग करें यदि आप निष्पादन के दौरान हटाने की योजना बना रहे हैं। कुछ ऐसा:

clean.doFirst { 
    delete "${rootDir}/api-library/auto-generated-classes/" 
    println "${rootDir}/api-library/auto-generated-classes/" 
} 

ग्रैडल बिल्ड स्क्रिप्ट ग्रोवी डीएसएल में लिखे गए हैं। ग्रोवी में आपको स्ट्रिंग इंटरपोलेशन के लिए डबल कोट्स का उपयोग करने की आवश्यकता है (जब आप ${} प्लेसहोल्डर के रूप में उपयोग कर रहे हैं)। here पर एक नज़र डालें।

+1

इसके बारे में सुनिश्चित नहीं हैं:

यहाँ एक उदाहरण है कि दोनों एक फ़ाइल और साफ कार्य में अंतिम चरण के रूप में एक निर्देशिका को नष्ट करेगा है। यह * कॉन्फ़िगरेशन * चरण पर फ़ाइल को हटा देगा, निष्पादन के दौरान नहीं। – Opal

21

<<clean.doLast के बराबर है। doFirst और doLastनिष्पादन चरण, पर संचालन का आदेश दे रहे हैं जो हटाए गए संचालन के लिए शायद ही कभी प्रासंगिक है।

इस मामले में आपको उनमें से किसी की भी आवश्यकता नहीं है।

clean { 
    delete 'someFile' 
} 

के रूप में mushfek0001 सही ढंग से उस में बताते हैं: आधार से स्वच्छ कार्य प्रकार Delete की है, तो आप बस इसे विन्यास समय में एक बंद यह बताने के लिए पारित करने के लिए क्या नष्ट करने के लिए जब वह निष्पादित की जरूरत है उसके जवाब है, आप दोहरे उद्धरण चिह्नों का उपयोग चर प्रक्षेप काम करने के लिए करना चाहिए:

clean { 
    delete "${buildDir}/someFile" 
} 

आप जावा प्लगइन या तो आधार लागू करें या घोषित की तरह, कम से कम आधार प्लग इन को इस के लिए आवेदन काम करने के लिए की आवश्यकता है सबसे अन्य प्लग-इन उनके clean प्रकार का कार्य Delete कार्य हटाएं। यदि आपके पास यह नहीं है तो त्रुटि आपको clean विधि अनुपलब्ध है।

apply plugin: 'base' 
+1

'हटाएं' $ {buildDir}/someFile ''buildDir' के लिए चर को हल नहीं करेगा। आपको '' ''का उपयोग करने की आवश्यकता है, उदाहरण के लिए' हटाएं" $ buildDir/someFile "' –

+0

'' '' '' 'के टाइपो को सही किया गया है। [जीएसट्रिंग्स] (http://docs.groovy-lang.org/latest/html/api/groovy/lang/GString के लिए डबल वूट्स का पुनर्गठन किया जाता है।एचटीएमएल) – Alpar

+0

लेकिन इस तरह आप पूरी तरह से साफ के डिफ़ॉल्ट व्यवहार को प्रतिस्थापित करते हैं। क्या होगा यदि उसके पास कुछ और कार्य संलग्न हैं? – mushfek0001

7

आदेश स्वच्छ कार्य का विस्तार करने के लिए, आप का उपयोग

clean.doFirst {} 

या

clean.doLast {} 

ये आप स्वच्छ प्रक्रिया में अपने खुद के कार्यों इंजेक्षन करने की अनुमति देगा कर सकते हैं। फ़ाइलों और निर्देशिकाओं को हटाने के लिए आप "फ़ाइल" एपीआई का उपयोग कर सकते हैं जिसके लिए किसी भी अतिरिक्त प्लगइन की आवश्यकता नहीं है।

clean.doLast { 
    file('src/main/someFile.txt').delete() 
    file('src/main/libs').deleteDir() 
} 
संबंधित मुद्दे