2011-01-27 16 views
12

मैं चींटी से ग्रैडल तक अपेक्षाकृत छोटी परियोजना को परिवर्तित कर रहा हूं। मैं बिल्ड स्क्रिप्ट में लाइनों की संख्या को लगभग 75% कम करने की उम्मीद करता हूं!मैं ग्राडल का उपयोग करके अपने स्रोत का एक ज़िप कैसे बना सकता हूं?

चींटी निर्माण एक चीज है जो एक स्रोत ज़िप (यानी पूरे प्रोजेक्ट का एक ज़िप, कुछ बिट्स को हटाकर - ./build, विभिन्न ग्रहण फ़ोल्डर्स इत्यादि) के साथ करना है, जबकि इसे ग्राडल में माइग्रेट करने के दौरान, मैंने फैसला किया "अनन्य" दृष्टिकोण के बजाय "समावेशी" दृष्टिकोण का उपयोग करें ताकि चीजें बाद में दुर्घटना से शामिल न हों।

मैं निर्देशिका स्रोतों को स्पष्ट रूप से सूचीबद्ध किए बिना सभी स्रोत सेटों के लिए स्रोत कोड और संसाधनों को पकड़ने में सक्षम होना चाहता हूं, लेकिन मैं इसे काम नहीं कर सकता।

यहाँ मैं अब तक राशि है (यहां तक ​​कि नहीं चलता है!):

task srcZip(type: Zip) { 
    classifier = 'src' 
    from projectDir 
    include { 
     sourceSets.collect { 
      it.allSource.asPath 
     } 
    } 
} 

ज़िप फ़ाइल फ़ोल्डरों 'src/मुख्य/जावा/...', 'src/मुख्य के साथ समाप्त होना चाहिए/संसाधन/... ',' src/test/java/... ', आदि, और जब मैं बाद में अधिक स्रोत सेट जोड़ता हूं तो मुझे इस कार्य को फिर से देखने की आवश्यकता नहीं है।

अग्रिम धन्यवाद!

उत्तर

19

1 ज़िप फ़ाइल में सभी स्रोतों आप इस का उपयोग कर सकते प्राप्त करने के लिए:

task srcZip(type: Zip) { 
    classifier = 'src' 
    from sourceSets*.allSource 
} 

यह आप निर्देशिका संरचना आप यद्यपि के लिए कहा नहीं देंगे। सभी स्रोत सेटों की फ़ाइलों को एक ही पदानुक्रम में रखा जाता है।

प्राप्त करने के लिए आप इस के लिए उपयोग कर सकते हैं कि तुम क्या पूछा:

task srcZip2(type: Zip) { 
    classifier = 'src' 
    from projectDir 
    include 'src/**/*' 
} 

बेशक, यह नहीं खाते में कोई भी परिवर्तन स्रोत निर्देशिका स्थानों के लिए कर सकता है ले करता है।

+0

हम्म ... हाँ, लेकिन यह मुझे थोड़े महसूस करता है ... गंदे! जवाब के लिए धन्यवाद। अगर आपको कोई जवाब नहीं मिलता है तो मैं आपको प्रतिनिधि दूंगा जो कुछ दिनों में मेरी आवश्यकताओं को बेहतर ढंग से फिट करता है। एक बार फिर धन्यवाद। – dty

+0

मुझे पता है तुम्हारा क्या मतलब है। मैंने निर्देशिका संरचना को बनाने में पहला फॉर्म को जोड़ने की कोशिश की, लेकिन आप नहीं कर सके। –

6

तो, 21 महीने बाद, यहाँ क्या मैं इस (Gradle 1.2 के साथ) काम करने के लिए प्राप्त करने के लिए किया था है

task srcZip(type: Zip) { 
    classifier = 'src' 
    from projectDir 
    include sourceSets*.allSource.srcDirs*.collect { relativePath(it) }.flatten() 
    include 'LICENCE', 'README', 'NOTICE', 'gradlew*' 
} 
assemble.dependsOn(srcZip) 

मेरे ग्रूवी फू मजबूत नहीं है, तो मुझे यकीन है कि बीच में भयानक बिट सरलीकृत किया जा सकता है, लेकिन यह अभी के लिए काम करता है!

+0

होना चाहिए कि sourceSets शामिल * .allSource.srcDirs * .collect {relativePath (यह) + '/**/*.* "} .flatten() अन्यथा तुम सिर्फ स्रोत फ़ोल्डरों मिल जाएगा लेकिन नहीं इसके साथ सामग्री है ग्रैडल 2.1। –

+0

हाय, मैं इसे प्राप्त करने के लिए एक कस्टम ग्रेडल प्लगइन प्रोजेक्ट का उपयोग कर रहा हूं लेकिन यह कोड (यदि सीधे उपयोग किया जाता है) मेरे लिए काम नहीं करता है। यह वर्गीकरण पर त्रुटि देता है और यदि मैं हटा देता हूं, तो यह त्रुटि देता है: कोई प्रॉपर्टी प्रोजेक्ट नहीं मिला। कोई विचार है कि मैं अपना कोड कैसे काम कर सकता हूं। – sver

4

यहां एक और तरीका है कि हम स्रोत कोड का ज़िप कैसे बना सकते हैं। हम आवश्यकता के अनुसार फाइलों को शामिल/बहिष्कृत कर सकते हैं। कस्टम प्लगइन के मामले में काम करता है जिसका मैं उपयोग कर रहा था और मैंने यह काम करने के बारे में बहुत समय बिताया। अंत में मैं इसे नीचे कोड का उपयोग करके प्राप्त कर सकता हूं:

Task taskSourceZip = project.task("makeSourceZip", type:Zip){ 
     baseName = "sourceZip" 
     from (project.rootDir){ 
      exclude ('*/*.iml') 
      exclude 'sourceZip.zip' 
     } 
     destinationDir project.rootDir 
    } 
संबंधित मुद्दे

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