ग्रेडल - कार्य

ग्रैड बिल्ड स्क्रिप्ट एक या अधिक प्रोजेक्ट्स के बारे में वर्णन करती है। प्रत्येक परियोजना विभिन्न कार्यों से बनी होती है। एक कार्य एक टुकड़ा है जो एक निर्माण कार्य करता है। कार्य कुछ वर्गों को संकलित कर सकता है, वर्ग फ़ाइलों को अलग-अलग लक्ष्य फ़ोल्डर में संग्रहीत करना, JAR बनाना, Javadoc उत्पन्न करना, या एक रिपॉजिटरी में कुछ प्राप्तियों को प्रकाशित करना।

यह अध्याय इस बारे में बताता है कि कार्य क्या है और किसी कार्य को कैसे और कैसे किया जाता है।

परिभाषित करने वाले कार्य

टास्क एक कीवर्ड है जो किसी कार्य को स्क्रिप्ट बनाने में परिभाषित करने के लिए उपयोग किया जाता है। निम्नलिखित उदाहरण पर एक नज़र डालें जो नाम के कार्य का प्रतिनिधित्व करता हैhello वह प्रिंट करता है tutorialspoint। निम्नलिखित स्क्रिप्ट को नाम की फ़ाइल में कॉपी करें और सहेजेंbuild.gradle। यह बिल्ड स्क्रिप्ट एक कार्य नाम हैलो को परिभाषित करता है जिसका उपयोग ट्यूटोरियलस्पर्श स्ट्रिंग को प्रिंट करने के लिए किया जाता है।

task hello {
   doLast {
      println 'tutorialspoint'
   }
}

कमांड प्रॉम्प्ट में निम्न कमांड निष्पादित करें। यह उपरोक्त स्क्रिप्ट को निष्पादित करता है। आपको इसे निष्पादित करना चाहिए जहां build.gradle फ़ाइल संग्रहीत है।

C:\> gradle –q hello

आउटपुट:

tutorialspoint

आप शॉर्टकट निर्दिष्ट करके (प्रतीक का प्रतिनिधित्व करते हुए) इस हैलो कार्य को सरल बना सकते हैं <<) को doLastबयान। यदि आप इस शॉर्टकट को उपरोक्त कार्य में जोड़ते हैंhello यह निम्नलिखित स्क्रिप्ट की तरह दिखेगा।

task hello << {
   println 'tutorialspoint'
}

आप उपरोक्त स्क्रिप्ट का उपयोग करके निष्पादित कर सकते हैं gradle –q hello आदेश।

यहाँ एक कार्य को परिभाषित करने में कुछ भिन्नताएँ हैं, इस पर एक नज़र डालें। निम्न उदाहरण एक कार्य को परिभाषित करता हैhello

निम्नलिखित कोड को कॉपी करें और सहेजें build.gradle फ़ाइल।

task (hello) << {
   println "tutorialspoint"
}

कमांड प्रॉम्प्ट में निम्न कमांड निष्पादित करें। यह ऊपर दी गई स्क्रिप्ट को निष्पादित करता है। आपको इसे निष्पादित करना चाहिए, जहां build.gradle फ़ाइल स्टोर होती है।

C:\> gradle –q hello

आउटपुट:

tutorialspoint

आप कार्य नामों के लिए स्ट्रिंग्स का उपयोग भी कर सकते हैं। एक ही हैलो उदाहरण पर एक नज़र डालें। यहां हम स्ट्रिंग का उपयोग कार्य के रूप में करेंगे।

निम्नलिखित कोड को कॉपी करें और सहेजें build.gradle फ़ाइल।

task('hello') << {
   println "tutorialspoint"
}

कमांड प्रॉम्प्ट में निम्न कमांड निष्पादित करें। यह ऊपर दी गई स्क्रिप्ट को निष्पादित करता है। आपको इसे निष्पादित करना चाहिए, जहां build.gradle फ़ाइल स्टोर होती है।

C:\> gradle –q hello

आउटपुट:

tutorialspoint

आप किसी कार्य को परिभाषित करने के लिए वैकल्पिक वाक्यविन्यास का उपयोग भी कर सकते हैं। जो किसी कार्य को परिभाषित करने के लिए create () विधि का उपयोग कर रहा है। नीचे दिए गए समान हैलो उदाहरण में एक नज़र डालें।

नीचे दिए गए कोड को कॉपी करें और सहेजें build.gradle फ़ाइल।

tasks.create(name: 'hello') << {
   println "tutorialspoint"
}

कमांड प्रॉम्प्ट में निम्न कमांड निष्पादित करें। यह ऊपर दी गई स्क्रिप्ट को निष्पादित करता है। आपको इसे निष्पादित करना चाहिए, जहां build.gradle फ़ाइल स्टोर होती है।

C:\> gradle –q hello

आउटपुट:

tutorialspoint

टास्क का पता लगाना

यदि आप बिल्ड फ़ाइल में परिभाषित किए गए कार्यों का पता लगाना चाहते हैं, तो आपको संबंधित मानक प्रोजेक्ट गुणों का उपयोग करना होगा। इसका मतलब है कि प्रत्येक कार्य परियोजना की संपत्ति के रूप में उपलब्ध है, कार्य नाम का उपयोग संपत्ति के नाम के रूप में किया जाता है।

निम्नलिखित कोड पर एक नज़र डालें जो कार्यों को गुणों के रूप में एक्सेस कर रहे हैं।

नीचे दिए गए कोड को कॉपी करें और सहेजें build.gradle फ़ाइल।

task hello

println hello.name
println project.hello.name

कमांड प्रॉम्प्ट में निम्न कमांड निष्पादित करें। यह ऊपर दी गई स्क्रिप्ट को निष्पादित करता है। आपको इसे निष्पादित करना चाहिए, जहां build.gradle फ़ाइल स्टोर होती है।

C:\> gradle –q hello

आउटपुट:

hello
hello

आप कार्य संग्रह के माध्यम से सभी गुणों का उपयोग भी कर सकते हैं।

निम्नलिखित कोड को कॉपी करें और सहेजें build.gradle फ़ाइल।

task hello

println tasks.hello.name
println tasks['hello'].name

कमांड प्रॉम्प्ट में निम्न कमांड निष्पादित करें। यह ऊपर दी गई स्क्रिप्ट को निष्पादित करता है। आपको इसे निष्पादित करना चाहिए, जहां build.gradle फ़ाइल स्टोर होती है।

C:\> gradle –q hello

आउटपुट:

hello
hello

आप कार्यों का उपयोग करके कार्य के पथ तक भी पहुंच सकते हैं। इसके लिए आप getByPath () विधि को किसी कार्य नाम या किसी संबंधित पथ या पूर्ण पथ के साथ कॉल कर सकते हैं।

नीचे दिए गए कोड को कॉपी करें और सहेजें build.gradle फ़ाइल।

project(':projectA') {
   task hello
}
task hello

println tasks.getByPath('hello').path
println tasks.getByPath(':hello').path
println tasks.getByPath('projectA:hello').path
println tasks.getByPath(':projectA:hello').path

कमांड प्रॉम्प्ट में निम्न कमांड निष्पादित करें। यह ऊपर दी गई स्क्रिप्ट को निष्पादित करता है। आपको इसे निष्पादित करना चाहिए, जहां build.gradle फ़ाइल स्टोर होती है।

C:\> gradle –q hello

आउटपुट:

:hello
:hello
:projectA:hello
:projectA:hello

कार्य में निर्भरता जोड़ना

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

निम्नलिखित उदाहरण जो टास्क से टास्कय पर निर्भरता जोड़ता है।

नीचे दिए गए कोड को कॉपी करें और सहेजें build.gradleफ़ाइल। निम्नलिखित कोड पर एक नज़र डालें।

task taskX << {
   println 'taskX'
}
task taskY(dependsOn: 'taskX') << {
   println "taskY"
}

कमांड प्रॉम्प्ट में निम्न कमांड निष्पादित करें। यह ऊपर दी गई स्क्रिप्ट को निष्पादित करता है। आपको इसे निष्पादित करना चाहिए, जहांbuild.gradle फ़ाइल स्टोर।

C:\> gradle –q taskY

आउटपुट:

taskX
taskY

उपरोक्त उदाहरण अपने नामों का उपयोग करके कार्य पर निर्भरता को जोड़ रहा है। कार्य निर्भरता को प्राप्त करने का एक और तरीका है जो टास्क ऑब्जेक्ट का उपयोग करके निर्भरता को परिभाषित करता है।

आइए हम टास्क का एक ही उदाहरण लेते हैं टास्क एक्स पर निर्भर होने के बावजूद हम टास्क रेफरेंस नामों के बजाय टास्क ऑब्जेक्ट का उपयोग कर रहे हैं।

निम्नलिखित कोड को कॉपी करें और सहेजें build.gradle फ़ाइल।

task taskY << {
   println 'taskY'
}
task taskX << {
   println 'taskX'
}
taskY.dependsOn taskX

कमांड प्रॉम्प्ट में निम्न कमांड निष्पादित करें। आपको इसे निष्पादित करना चाहिए जहां build.gradle फ़ाइल संग्रहीत है।

C:\> gradle –q taskY

आउटपुट:

taskX
taskY

उपरोक्त उदाहरण अपने नामों का उपयोग करके कार्य पर निर्भरता को जोड़ रहा है। कार्य निर्भरता को प्राप्त करने का एक और तरीका है जो टास्क ऑब्जेक्ट का उपयोग करके निर्भरता को परिभाषित करता है।

यहाँ हम एक ही उदाहरण लेते हैं कि टास्क टास्क पर निर्भर है लेकिन हम टास्क रेफरेंस नामों के बजाय टास्क ऑब्जेक्ट का उपयोग कर रहे हैं। इस पर एक नज़र डालें।

नीचे दिए गए कोड को कॉपी करें और सहेजें build.gradleफ़ाइल। निम्नलिखित कोड पर एक नज़र डालें।

task taskX << {
   println 'taskX'
}
taskX.dependsOn {
   tasks.findAll { 
      task → task.name.startsWith('lib') 
   }
}
task lib1 << {
   println 'lib1'
}
task lib2 << {
   println 'lib2'
}
task notALib << {
   println 'notALib'
}

कमांड प्रॉम्प्ट में निम्न कमांड निष्पादित करें। यह ऊपर दी गई स्क्रिप्ट को निष्पादित करता है। आपको इसे निष्पादित करना चाहिए, जहांbuild.gradle फ़ाइल स्टोर।

C:\> gradle –q taskX

आउटपुट:

lib1
lib2
taskX

किसी कार्य का विवरण जोड़ना

आप अपने कार्य के लिए एक विवरण जोड़ सकते हैं। यह विवरण निष्पादित करते समय प्रदर्शित होता हैGradle tasks। यह विवरण कीवर्ड का उपयोग करके संभव है।

निम्नलिखित कोड को कॉपी करें और सहेजें build.gradleफ़ाइल। निम्नलिखित कोड पर एक नज़र डालें।

task copy(type: Copy) {
   description 'Copies the resource directory to the target directory.'
   from 'resources'
   into 'target'
   include('**/*.txt', '**/*.xml', '**/*.properties')
   println("description applied")
}

कमांड प्रॉम्प्ट में निम्न कमांड निष्पादित करें। आपको इसे निष्पादित करना चाहिए जहां build.gradle फ़ाइल संग्रहीत है।

C:\> gradle –q copy

यदि कमांड को सफलतापूर्वक निष्पादित किया जाता है, तो आपको निम्न आउटपुट मिलेगा।

description applied

स्किपिंग टास्क

स्किपिंग कार्यों को एक विधेय बंद करके पारित किया जा सकता है। यह तभी संभव है, जब किसी कार्य का तरीका या क्लोजर एStopExecutionException किसी कार्य के वास्तविक कार्य को निष्पादित करने से पहले।

निम्नलिखित कोड को कॉपी करें और सहेजें build.gradle फ़ाइल।

task eclipse << {
   println 'Hello Eclipse'
}

// #1st approach - closure returning true, if the task should be executed, false if not.
eclipse.onlyIf {
   project.hasProperty('usingEclipse')
}

// #2nd approach - alternatively throw an StopExecutionException() like this
eclipse.doFirst {
   if(!usingEclipse) {
      throw new StopExecutionException()
   }
}

कमांड प्रॉम्प्ट में निम्न कमांड निष्पादित करें। आपको इसे निष्पादित करना चाहिए जहां build.gradle फ़ाइल संग्रहीत है।

C:\> gradle –q eclipse

कार्य संरचना

कार्यों के साथ काम करते समय ग्रेडल के अलग-अलग चरण होते हैं। सबसे पहले, एक कॉन्फ़िगरेशन चरण है, जहां कोड, जिसे सीधे किसी कार्य के बंद होने में निर्दिष्ट किया गया है, निष्पादित किया जाता है। कॉन्फ़िगरेशन ब्लॉक को हर उपलब्ध कार्य के लिए निष्पादित किया जाता है, न केवल उन कार्यों के लिए जिन्हें बाद में वास्तव में निष्पादित किया जाता है।

कॉन्फ़िगरेशन चरण के बाद, निष्पादन चरण कोड के अंदर कोड चलाता है doFirst या doLast उन कार्यों को बंद करना, जिन्हें वास्तव में निष्पादित किया जाता है।