[gradle] Gradle에 작업 종속성을 나열하는 방법이 있습니까?

./gradle tasks작업 중 “일부”를 나열합니다. http://gradle.org/docs/current/userguide/java_plugin.html을 보면
보이지 않는 숨겨진 것들이 있습니다. 또한 다른 플러그인에는 작업 간의 종속성에 대한 멋진 그래프가 없습니다.

방법이 있습니까

  1. gradle을 사용하여 모든 플러그인의 모든 작업을 나열하십시오.
  2. 작업과 그들이 의존하는 작업을 나열하십시오 (maven과 비슷 dependency:tree하지만 작업을위한 것)


답변

–all 플래그를 사용하여 사용 가능한 작업 및 작업 종속성에 대한 자세한 목록을 얻을 수 있습니다.

gradle tasks --all

편집 : 의견에서 Radim이 지적한 것처럼이 명령은 gradle 3.3 이상에 대한 종속성을보고하지 않습니다 ( https://docs.gradle.org/3.3/release-notes.html#improved-performance-of-tasks- 보고서 ).


답변

작업과 그들이 의존하는 작업을 나열하십시오 (maven의 depenceny : tree와 같지만 작업을위한 것)

이를 위해 당신은 사용할 수 있습니다 --dry-run-m 위해 특정 명령에 대해 실행되지만 명령을 실행하지 않는 작업을 나열 (또는 ) 옵션을

gradle assemble --dry-run

여기서 더 찾을 수 있습니다


답변

간단한 사용법으로 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


답변

이것을 당신의 것으로 붙일 수 있습니다 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


답변

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을 –profile 정리 빌드

이 작업이 완료되면 build / reports / profile 폴더로 이동하여 .html 파일을 찾으십시오. 좋은 html 페이지에서 시간이 지남에 따라 종속성 해결 및 기타 정보가 표시됩니다.


답변

프로그래밍 방식으로 작업 그래프에 액세스하여 Gradle.getTaskGraph ()를 사용하여 빌드 스크립트 내에서 작업 그래프를 검사 할 수 있습니다.


답변

다중 프로젝트가 커짐에 따라 내가 올바른 것으로 표시 한 솔루션은 약간 부실하고 읽기 어려워집니다

gradle tasks --all

대신 특정 프로젝트를 살펴 보는 것이 훨씬 쉬워졌습니다.

gradlew :full-httpproxy:tasks --all

여기서 ‘full-httpproxy’는 내 프로젝트 이름이며 일반적인 디렉토리입니다.

그러나 마스터 / 루트 프로젝트에 작업을 나열하는 방법이 궁금하고 여기에서도 눈에 띄는 질문이 있습니다.

마스터 프로젝트의 모든 작업을 gradle로만 나열하는 방법은 무엇입니까?

지금은 불가능한 것 같습니다.