क्या ग्रैडल में कार्य निर्भरता को सूचीबद्ध करने का एक तरीका है?


139

./gradle tasksकार्यों के "कुछ" को सूचीबद्ध करता है। Http://gradle.org/docs/current/userguide/java_plugin.html को देखते हुए छिपे हुए लोग सूचीबद्ध नहीं हैं। इसके अलावा, अन्य प्लगइन्स में कार्यों के बीच निर्भरता का इतना अच्छा सुंदर ग्राफ नहीं होगा।

क्या कोई रास्ता है

  1. सभी प्लगइन्स में सभी कार्यों को सूचीबद्ध करें
  2. कार्यों को सूचीबद्ध करें और वे कौन से कार्यों पर निर्भर करते हैं (जैसे मावेन की तरह dependency:treeलेकिन कार्यों के लिए)

जवाबों:


99

उपलब्ध कार्यों और कार्य निर्भरताओं की अधिक विस्तृत सूची प्राप्त करने के लिए आप -all ध्वज का उपयोग कर सकते हैं

gradle tasks --all

EDIT: जैसा कि टिप्पणियों में रदीम द्वारा कहा गया है, यह कमांड निर्भरता की रिपोर्ट नहीं करता है, ग्रेडल 3.3 और नए के लिए (देखें https://docs.gradle.org/3.3/release-notes.html#improved-performance-of-n- रिपोर्ट )।


यह कहीं से भी वेब से निर्भरता डाउनलोड करने के लिए एक कार्य को सूचीबद्ध नहीं करता है ??? कार्य को चलाने से स्पष्ट रूप से सामान डाउनलोड होता है लेकिन निश्चित नहीं है कि वह निर्भरता कहाँ है ... इसे अधिभारित करने का कोई तरीका नहीं है?
डीन हिलर

2
संसाधनों को डाउनलोड करने की क्रिया एक समर्पित कार्य के लिए बाध्य नहीं है। विन्यास में निर्भरता विन्यास में जोड़ी जाती है। जैसे ही आप (अपने स्वयं के कार्य कार्यान्वयन में) या ग्रेडेल (अपने स्वयं के प्रदान किए गए कार्यों में) इस कॉन्फ़िगरेशन की फ़ाइलों को संदर्भित करते हैं, संकल्प तंत्र को ट्रिगर किया जाता है।
रेन ग्रेशके

54
यह निर्भरता को सूचीबद्ध नहीं करता है, कम से कम ग्रेडेल 1.5 या 1.7 के साथ। क्या यह है कि यह एक बार किया था, या यह एक अधूरा जवाब है?
टॉम एंडरसन

10
केवल 3.3 से अधिक पुराने ग्रेडल के लिए काम करता है। कार्य रिपोर्टिंग में एक बदलाव हुआ जिसने इस आउटपुट को हटा दिया।
रेडिम

135

कार्यों को सूचीबद्ध करें और वे कौन से कार्यों पर निर्भर करते हैं (जैसे कि मावेन की उदासीनता: वृक्ष लेकिन कार्यों के लिए)

इसके लिए आप --dry-run(या -m) विकल्प का उपयोग कर सकते हैं जो उन कार्यों को सूचीबद्ध करता है जो विशेष आदेश के लिए निष्पादित किए जाते हैं, लेकिन कमांड निष्पादित नहीं करते हैं, जैसे।

gradle assemble --dry-run

आप यहां और अधिक जानकारी प्राप्त कर सकते हैं


2
यह कार्य ट्री या कार्य निर्भरता को सूचीबद्ध नहीं करता है, यह सिर्फ सूचीबद्ध करता है कि कौन से कार्य निष्पादित किए गए हैं।
bcampolo

@bcampolo क्या अंतर है?
किलटेक

39

आप साधारण उपयोग के साथ com.dorongold.task- ट्री प्लगइन आज़मा सकते हैं :

gradle <task 1>...<task N> taskTree

उदाहरण के लिए readme से परिणाम :

gradle build taskTree

:build
+--- :assemble
|    \--- :jar
|         \--- :classes
|              +--- :compileJava
|              \--- :processResources
\--- :check
     \--- :test
          +--- :classes
          |    +--- :compileJava
          |    \--- :processResources
          \--- :testClasses
               +--- :compileTestJava
               |    \--- :classes
               |         +--- :compileJava
               |         \--- :processResources
               \--- :processTestResources

5
एक क्लीनर आउटपुट के लिए, का उपयोग करें --no-repeat। स्रोत: github.com/dorongold/gradle-task-tree
AlikElzin-kilaka

30

आप इसे अपने में चिपका सकते हैं build.gradle:

gradle.taskGraph.whenReady {taskGraph ->
    println "Found task graph: " + taskGraph
    println "Found " + taskGraph.allTasks.size() + " tasks."
    taskGraph.allTasks.forEach { task ->
        println task
        task.dependsOn.forEach { dep ->
            println "  - " + dep
        }
    }
}

या यह आपके में build.gradle.kts:

gradle.taskGraph.whenReady(closureOf<TaskExecutionGraph> {
    println("Found task graph: $this")
    println("Found " + allTasks.size + " tasks.")
    allTasks.forEach { task ->
        println(task)
        task.dependsOn.forEach { dep ->
            println("  - $dep")
        }
    }
})

फिर अपने काम को ढाल के साथ चलाएं:

./gradlew build

और आपको यह देखना चाहिए:

Found task graph: org.gradle.execution.taskgraph.DefaultTaskGraphExecuter@36eb780c
Found 19 tasks.
task ':compileJava'
  - task 'compileJava' input files
task ':compileScala'
  - task 'compileScala' input files
  - compileJava
task ':processResources'
  - task 'processResources' input files
task ':classes'
  - org.gradle.api.internal.tasks.DefaultTaskDependency@287a7782
  - task 'classes' input files
  - compileJava
  - dirs
  - compileScala
  - processResources
task ':jar'
  - task 'jar' input files
task ':assemble'
  - task 'assemble' input files
  - org.gradle.api.internal.artifacts.DefaultPublishArtifactSet$ArtifactsTaskDependency@5bad9616
task ':compileTestJava'
    - task 'compileTestJava' input files
task ':compileTestScala'
  - task 'compileTestScala' input files
  - compileTestJava
task ':processTestResources'
  - task 'processTestResources' input files
task ':testClasses'
  - processTestResources
  - task 'testClasses' input files
  - compileTestScala
  - org.gradle.api.internal.tasks.DefaultTaskDependency@42c1fa08
  - compileTestJava
  - dirs
task ':compileIntegrationTestJava'
  - task 'compileIntegrationTestJava' input files
task ':compileIntegrationTestScala'
  - task 'compileIntegrationTestScala' input files
  - compileIntegrationTestJava
task ':processIntegrationTestResources'
  - task 'processIntegrationTestResources' input files
task ':integrationTestClasses'
  - processIntegrationTestResources
  - compileIntegrationTestJava
  - org.gradle.api.internal.tasks.DefaultTaskDependency@7c8aa0fe
  - compileIntegrationTestScala
  - dirs
  - task 'integrationTestClasses' input files
task ':composeUp'
  - task 'composeUp' input files
task ':integrationTest'
  - task ':composeUp'
  - task 'integrationTest' input files
task ':test'
  - task 'test' input files
task ':check'
  - task 'check' input files
  - task ':test'
  - task ':integrationTest'
task ':build'
  - task 'build' input files
  - check
  - assemble

यह एक ग्राफ की तरह थोड़ा सा दिखता है, लेकिन यह वास्तव में सिर्फ वही है जो प्रत्येक कार्य पर निर्भर करता है। यह प्रत्येक नोड के माता-पिता के साथ नोड्स की एक सूची है। इसलिए यदि आपका ग्राफ दिखता है A <- B <- (C and D), तो यह आपको दिखाएगा B-A, C-B, D-B। यह अभी भी कुछ मदद करता है!
नूमेनन

1
यह एक ग्राफ होना चाहिए, लेकिन एक ग्राफ को प्रस्तुत करना गैर-तुच्छ है। उपरोक्त कोड का आउटपुट सिर्फ किसी कार्य की तत्काल निर्भरता को सूचीबद्ध करता है।
15

15

Gradle कार्य पेड़ से देखे जा सकते हैं gradle tasks --all या निम्न प्लग-इन की कोशिश:

ग्राफ़ ग्रैडल और तलैयाट: इस पर गौर करें: https://proandroiddev.com/graphs-gradle-and-talaiot-b0c02c50d2b1 ब्लॉग के रूप में यह रेखांकन देखने के कार्यों और निर्भरता को सूचीबद्ध करता है। यह मुफ्त खुला ग्राफविज़ टूल Gephi ( https://gephi.org/features/ ) का उपयोग करता है

gradle-task-tree : https://github.com/dorongold/gradle-task-tree और

gradle-visteg : https://github.com/mmalohlava/gradle-visteg

  1. gradle-visteg plugin: उत्पन्न फ़ाइल को ग्राफविज़ dot यूटिलिटी के माध्यम से पोस्ट-प्रोसेस किया जा सकता है ।

  2. उदाहरण के लिए , png छवि निम्नानुसार बनाई गई है:

    cd build/reports/; dot -Tpng ./visteg.dot -o ./visteg.dot.png

अधिक जानकारी के लिए, कृपया ग्राफविज़ होम पेज पर जाएँ ।

जो भी कार्य वास्तव में एक कार्य को चलाने के लिए उपयोग किए जाते हैं (उदाहरण के लिए:) विकल्प buildका उपयोग करके अच्छा HTML पृष्ठ में देखा जा सकता --profileहै

gradle - लाभकारी स्वच्छ निर्माण

एक बार यह पूरा हो जाए, तो बिल्ड / रिपोर्ट / प्रोफाइल फोल्डर पर जाएं और .html फ़ाइल ब्राउज़ करें। आपको निर्भरताएँ रिज़ॉल्यूशन और अन्य जानकारी समय के साथ दिखाई देगी, जो एक अच्छे html पेज में है।


11
रिपोर्ट में कार्यों के बीच निर्भरता के बारे में कोई जानकारी नहीं है। यह सिर्फ क्रमिक रूप से उन सभी कार्यों को सूचीबद्ध करता है जो निर्माण के दौरान निष्पादित किए गए थे।
rwitzel

7

आप Gradle.getTaskGraph () का उपयोग करके निर्माण स्क्रिप्ट के भीतर निरीक्षण करने के लिए प्रोग्राम ग्राफ को प्रोग्रामेटिक रूप से एक्सेस कर सकते हैं


6
gradle.getTaskGraph () केवल आपको उन कार्यों को दिखाता है जो आपके वर्तमान ग्रेडेल बिल्ड में निष्पादित किए जाएंगे और यह टास्कग्राफ केवल निष्पादन चरण में उपलब्ध है।
रेने ग्रेशके

3

जैसे-जैसे आपका मल्टीप्रोजेक्ट बढ़ता है, मैंने जिस समाधान को सही माना है, वह थोड़ा अस्पष्ट और पढ़ने में कठिन हो जाता है

gradle tasks --all

इसके बजाय, मैं एक विशिष्ट परियोजना को देखने के लिए आगे बढ़ा हूं जिससे यह बहुत आसान हो गया है

gradlew :full-httpproxy:tasks --all

जहाँ 'फुल-कैनपॉक्सी' मेरी परियोजना का नाम है (और जैसा कि विशिष्ट है)।

मैं हालांकि उत्सुक हूं कि मास्टर / रूट प्रोजेक्ट पर कार्यों को कैसे सूचीबद्ध किया जाए और यहां भी एक उत्कृष्ट प्रश्न है

केवल परियोजना में मास्टर प्रोजेक्ट के लिए सभी कार्यों को कैसे सूचीबद्ध किया जाए?

जैसा कि अभी संभव नहीं लगता है।



0

Cstroe द्वारा उत्तर के बाद, निम्नलिखित भी प्रत्येक ग्रेडल कार्य के इनपुट और आउटपुट फ़ाइलों को प्रिंट करता है। यह उपयोगी है क्योंकि निर्भरता कभी-कभी इनपुट / आउटपुट संबंधों द्वारा परिभाषित की जाती है। Ie, यदि कार्य B, A के आउटपुट का उपयोग करता है, तो cstroe का उत्तर आपको निर्भरता नहीं दिखाएगा। निम्नलिखित बहुत ही आदिम है लेकिन प्रत्येक कार्य के लिए इनपुट और आउटपुट फ़ाइलों की सूची दिखाता है:

gradle.taskGraph.whenReady {taskGraph ->
    println "Found task graph: " + taskGraph
    println "Found " + taskGraph.allTasks.size() + " tasks."
    taskGraph.allTasks.forEach { task ->
        println()
        println("----- " + task + " -----")
        println("depends on tasks: " + task.dependsOn)
        println("inputs: ")
        task.inputs.getFiles().getFiles().collect { f -> println(" - " + f)}
        println("outputs: ")
        task.outputs.getFiles().getFiles().collect { f -> println(" + " + f)}
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.