มีวิธีในการแสดงรายการงานที่ต้องพึ่งพาใน Gradle หรือไม่?


139

./gradle tasksแสดงรายการ "บางส่วน" ของงาน ดูที่ http://gradle.org/docs/current/userguide/java_plugin.htmlมีสิ่งที่ซ่อนอยู่ซึ่งไม่ปรากฏในรายการ นอกจากนี้ปลั๊กอินอื่น ๆ จะไม่มีกราฟที่สวยงามของการพึ่งพาระหว่างงาน

มีวิธีในการ

  1. แสดงรายการงานทั้งหมดในปลั๊กอินทั้งหมดด้วย gradle
  2. รายการงานและสิ่งที่พวกเขาขึ้นอยู่กับงาน (เรียงลำดับเช่น Maven ของdependency:treeแต่สำหรับงาน)

คำตอบ:


99

คุณสามารถใช้แฟล็ก --all เพื่อรับรายการที่มีรายละเอียดเพิ่มเติมของภารกิจที่พร้อมใช้งานและการพึ่งพาภารกิจ

gradle tasks --all

แก้ไข: ตามที่ระบุไว้โดย Radim ในความคิดเห็นคำสั่งนี้ไม่ได้รายงานการขึ้นต่อกันสำหรับ gradle 3.3 และใหม่กว่า (ดูhttps://docs.gradle.org/3.3/release-notes.html#improved-performance-of-tasks-) รายงาน )


ดูเหมือนว่าจะไม่มีรายการงานสำหรับการดาวน์โหลดการอ้างอิงจากเว็บทุกที่ ??? การรันภารกิจคราสดาวน์โหลดเนื้อหาอย่างชัดเจน แต่ไม่แน่ใจว่าการพึ่งพานั้นอยู่ที่ไหน ... ไม่มีวิธีในการโอเวอร์โหลดหรือไม่
Dean Hiller

2
การกระทำของการดาวน์โหลดทรัพยากรจะไม่ถูกผูกไว้กับงานเฉพาะ การพึ่งพาใน gradle จะถูกเพิ่มในการกำหนดค่า ทันทีที่คุณ (ในการใช้งานของคุณเอง) หรือไล่ระดับ (ในงานที่จัดให้ของตัวเอง) อ้างอิงไฟล์ของการกำหนดค่านี้กลไกการแก้ไขจะถูกเรียกใช้
Rene Groeschke

54
สิ่งนี้ไม่แสดงรายการการพึ่งพาอย่างน้อยกับ Gradle 1.5 หรือ 1.7 มันเคยทำเช่นนั้นหรือนี่เป็นคำตอบที่ไม่สมบูรณ์หรือไม่?
Tom Anderson

10
ใช้งานได้สำหรับการไล่ระดับสีที่เก่ากว่า 3.3 เท่านั้น มีการเปลี่ยนแปลงในการรายงานงานที่ลบผลลัพธ์นี้
Radim

135

รายการงานและสิ่งที่พวกเขาขึ้นอยู่กับงาน (เรียงลำดับเช่นคำย่อของ Maven: ต้นไม้ แต่สำหรับงาน)

สำหรับสิ่งนี้คุณสามารถใช้ตัวเลือก--dry-run(หรือ-m) ซึ่งจะแสดงรายการงานที่จะดำเนินการเพื่อให้คำสั่งเฉพาะ แต่ไม่ได้ดำเนินการคำสั่งเช่น

gradle assemble --dry-run

คุณสามารถหาข้อมูลเพิ่มเติมได้ที่นี่


2
นี่ไม่ได้แสดงรายการต้นไม้งานหรือการพึ่งพางานเพียงแค่รายการงานที่จะได้รับการดำเนินการ
bcampolo

@bcampolo ความแตกต่างคืออะไร?
kiltek

39

คุณสามารถลองปลั๊กอินcom.dorongold.task-treeด้วยการใช้งานง่าย:

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

31

คุณสามารถใส่สิ่งนี้ลงใน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")
        }
    }
})

จากนั้นรันภารกิจของคุณด้วย gradle:

./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มันยังช่วยได้บ้าง!
Noumenon

1
ควรเป็นกราฟ แต่การเรนเดอร์กราฟนั้นไม่ใช่เรื่องเล็กน้อย ผลลัพธ์ของรหัสข้างต้นเป็นเพียงรายการการอ้างอิงทันทีของงาน
cstroe

15

ทรีงาน gradle สามารถมองเห็นได้โดยgradle tasks --all หรือลองใช้ปลั๊กอินต่อไปนี้:

กราฟ Gradle และ Talaiot: ดูที่นี่: https://proandroiddev.com/graphs-gradle-and-talaiot-b0c02c50d2b1บล็อกขณะที่มันแสดงรายการงานกราฟิกและการอ้างอิง สิ่งนี้ใช้เครื่องมือ Graphviz แบบเปิดฟรี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 : ไฟล์ที่สร้างขึ้นสามารถโพสต์ผ่านการประมวลผลผ่านยูทิลิตี้Graphviz dot

  2. ตัวอย่างเช่นภาพ png ผลิตดังนี้:

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

สำหรับข้อมูลเพิ่มเติมกรุณาเยี่ยมชมหน้าแรกของGraphviz

ไม่ว่างานใดก็ตามที่ใช้เพื่อเรียกใช้งานจริง (เช่น:) buildสามารถดูได้ในหน้า HTML ที่ดีโดยใช้--profileตัวเลือก

gradle - โปรไฟล์build ที่สะอาด

เมื่อเสร็จแล้วให้ไปที่โฟลเดอร์ build / reports / profile แล้วเรียกดูไฟล์. html คุณจะเห็นความละเอียดการอ้างอิงและข้อมูลอื่น ๆ พร้อมเวลาที่ใช้ในหน้า html ที่ดี


11
รายงานไม่มีข้อมูลใด ๆ เกี่ยวกับการพึ่งพาระหว่างงาน มันจะแสดงรายการตามลำดับงานทั้งหมดที่ดำเนินการในระหว่างการสร้าง
rwitzel

7

คุณสามารถเข้าถึงกราฟงานโดยทางโปรแกรมเพื่อตรวจสอบภายในสคริปต์บิลด์โดยใช้ Gradle.getTaskGraph ()


6
gradle.getTaskGraph () จะแสดงเฉพาะงานที่จะดำเนินการในการสร้าง gradle ปัจจุบันของคุณและ taskGraph นี้จะใช้ได้เฉพาะในขั้นตอนการดำเนินการ
Rene Groeschke

3

เมื่อ multiproject ของคุณเติบโตขึ้นโซลูชันที่ฉันทำเครื่องหมายว่าถูกต้องจะเพิ่มขึ้นเล็กน้อยและไม่น่าอ่าน

gradle tasks --all

แต่ฉันได้ย้ายไปดูโครงการเฉพาะทำให้มันง่ายขึ้นมาก

gradlew :full-httpproxy:tasks --all

โดยที่ 'full-httpproxy' เป็นชื่อโครงการของฉัน (และไดเรกทอรีตามปกติ)

อย่างไรก็ตามฉันอยากรู้ว่าจะเขียนรายการงานในโครงการหลัก / รูทได้อย่างไรและมีคำถามที่โดดเด่นเช่นกัน

วิธีการแสดงรายการงานทั้งหมดสำหรับโครงการหลักเฉพาะใน gradle?

การทำเช่นนั้นดูเหมือนจะเป็นไปไม่ได้ในตอนนี้



0

ทำตามคำตอบโดย cstroe ต่อไปนี้จะพิมพ์ไฟล์อินพุตและเอาต์พุตของงาน Gradle แต่ละงาน สิ่งนี้มีประโยชน์เนื่องจากบางครั้งการอ้างอิงถูกกำหนดโดยความสัมพันธ์อินพุต / เอาต์พุต คือถ้างาน 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)}
    }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.