2015-01-15 8 views
7

मैं अपने प्रोजेक्ट फ़ोल्डर से जार में 2 फ़ोल्डरों की प्रतिलिपि बनाने की कोशिश कर रहा हूं। , नहीं फ़ोल्डरों themself जब मैं निम्नलिखित सेटिंग्स Gradle प्रतियां फ़ोल्डर के अंदर फ़ाइलों का उपयोग:ग्रैडल कॉपी संसाधन, प्रक्रिया स्रोत

processResources { 
    from 'public' 
    from 'data' 
} 

क्या मैं जरूरत फ़ोल्डर "ProjectDir/डेटा" "my.jar/डेटा" में copyied है।

उत्तर

3

copy ग्रैडल में spec एक फ़ोल्डर की सामग्री प्रतिलिपि बनाता है यदि from में निर्दिष्ट पथ एक फ़ोल्डर है।

एक समाधान intodirective का उपयोग कर jar में लक्ष्य फ़ोल्डर निर्दिष्ट करना है।

processResources { 
    from 'data' 
    from 'publicFolder' 
} 

task data(type: Copy) { 
    from 'data' into 'data' 
} 

task publicFolder(type: Copy) { 
    from 'public' into 'public' 
} 

यह सामग्री या मूल फ़ोल्डर को जार के भीतर उसी नाम के साथ फ़ोल्डर में रखेगा। लेकिन जैसा कि आप देख सकते हैं, आपको into बंद करने के भीतर फ़ोल्डर नाम दोहराना होगा।

एक और कामकाज इन संसाधन फ़ोल्डरों के लिए मूल फ़ोल्डर होना है और copy spec में इस मूल फ़ोल्डर का उपयोग करना है।

processResources { 
    from 'res' 
} 

इस में फ़ोल्डर बनाने जाएगा public और data:

<project-folder> 
| 
--> res 
    | 
    --> public 
    --> data 

फिर processResources की copy कल्पना में, आप निम्न कर सकते हैं:

यहाँ एक तरह से आप संसाधन फ़ोल्डरों संरचना सकता है जैसा कि आप चाहते हैं अंतिम जार फ़ाइल।

+0

क्या "प्रोजेक्ट रूट 'फ़ोल्डर से कॉपी करना और केवल' डेटा 'और' सार्वजनिक 'फ़ोल्डर्स लेना संभव है? –

+1

फ़ोल्डर नामों के लिए फ़िल्टर का उपयोग करना मेरे लिए सही तरीके से काम नहीं करता है। हालांकि मैंने उत्तर को प्राथमिक समाधान के साथ संपादित किया है जिसमें फ़ोल्डरों को फिर से व्यवस्थित करने में शामिल नहीं है। उम्मीद है की वो मदद करदे। मैं सहमत हूं कि 'projectRoot' फ़ोल्डर से _copy कहना आदर्श तरीका है और केवल वही फ़ोल्डर शामिल करें जो मैं चाहता हूं। अगर मैं एक प्राप्त करता हूं तो इसका समाधान पोस्ट करूंगा। –

+0

"इन" समाधान के लिए धन्यवाद। यह कुछ ऐसा था जो मैं ढूंढ रहा था। समस्या यह है कि यह मेरे लिए काम नहीं करता है। मुझे त्रुटि मिलती है "> रूट प्रोजेक्ट पर तर्कों के लिए विधि सार्वजनिक() नहीं मिल सका [build_akni020h40dn3k7vwmwbm63ee $ _run_closure2_closure3 @ 4d266391]" –

3

'से' की एक विधि है जो CopySpec के साथ बंद हो जाती है।

मैं या तो अलग-अलग कार्यों में तोड़ने या अपने लेआउट को पुनर्गठन करने के बजाय इसका उपयोग करने की अनुशंसा करता हूं।

processResources { 
    from('data') {into 'data'} 
    from('publicFolder') {into 'publicFolder'} 
} 
संबंधित मुद्दे