2014-07-03 10 views
7

मुझे फ़ाइलों को प्रतिलिपि बनाने में कोई समस्या है। यहाँ build.gradle का एक टुकड़ा है:ग्रेड - निर्देशिका की प्रतिलिपि बनाना - समस्या

task mydir() { 
    new File("build/models").mkdir() 
} 

task copyTask(dependsOn:mydir, type: Copy){ 

    from 'src/test/groovy/models' 
    into 'build/models' 

    from 'src/test/groovy/test.groovy' 
    into 'build/' 
} 

यहां मुद्दा यह है, पहली कॉपी में है कि है, test.groovyनिर्माण में बनाई जाए। लेकिन पहली प्रतिलिपि, जहां मैं src /../ मॉडल में बिल्ड/मॉडल में सभी फ़ाइलों की प्रतिलिपि बना रहा हूं, काम नहीं कर रहा है। यह बस फ़ाइलों को निर्देशिका में कॉपी करता है। मेरा बिल्ड/मॉडल खाली रहें। क्या कोई मुझे बता सकता है कि मैं क्या गलत कर रहा हूं? कॉपीटास्क निष्पादन से पहले बिल्ड/मॉडल निर्देशिका बनाने के लिए मेरे पास एक अलग कार्य भी है।

+0

मैं कॉपी विधि के बजाय कॉपी विधि का उपयोग करता हूं: कॉपी, यह काम करता है। यकीन नहीं है कि इसके पीछे क्या कारण है। प्रलेखन कहते हैं, नकल प्रकार अप-टू-डेट की जांच करता है। जबकि कॉपी() विधि जांच नहीं है। – user3721344

उत्तर

11

निर्माण स्क्रिप्ट निम्नलिखित गलतियों शामिल हैं: जब mydirकॉन्फ़िगर किया गया है, नहीं है जब यह निष्पादित है

  1. निर्देशिका बनाई गई है। (इसका मतलब यह है निर्देशिका, हर निर्माण मंगलाचरण पर बनाया जाएगा परवाह किए बिना, जिनमें से कार्य निष्पादित हो।)
  2. new File('some/path') Gradle प्रक्रिया की वर्तमान कार्यशील निर्देशिका, नहीं परियोजना निर्देशिका के पथ रिश्तेदार के पथ रिश्तेदार पैदा करता है। इसके बजाए हमेशा project.file() का उपयोग करें।
  3. Copy कार्य में केवल एक शीर्ष-स्तर into हो सकता है।

यहाँ एक सही संस्करण है:

task mydir { 
    doLast { 
     mkdir('build/models') 
    } 
} 

task copyTask(dependsOn: mydir, type: Copy) { 
    into 'build' 
    from 'src/test/groovy/test.groovy' 
    into('models') { 
     from 'src/test/groovy/models' 
    } 
} 

Copy कार्य build/models स्वचालित रूप से बन जाएगा, ताकि वहाँ की संभावना mydir काम है करने के लिए कोई जरूरत नहीं है। कार्य की लक्ष्य निर्देशिका के रूप में build का उपयोग करना अजीब है (उपनिर्देशिका का उपयोग करना चाहिए)।

-1

क्रम में, कॉपी कार्य में एकाधिक से अधिक के साथ 'इन' लक्ष्य हो सकता है।

दूसरा मान 'में' पहली ओवरराइड और यही कारण है कि यह केवल 'निर्माण /' नहीं 'का निर्माण/मॉडल' में नकल है 'में'

आप एक अलग प्रतिलिपि कार्य है या चींटी का उपयोग कर सकते इसके बजाय .copy।

+2

आप ओवरराइडिंग के बारे में सही हैं। हालांकि, 'कॉपी' कार्य में किसी भी स्वतंत्र * कॉपी क्रियाएं हो सकती हैं *। उन्हें आम तौर पर एक "आधार" लक्ष्य निर्देशिका (शीर्ष-स्तर 'में') होना चाहिए। –

+0

धन्यवाद! अब कुछ उपयोगी सीखो –

संबंधित मुद्दे