首页 文章

有没有办法在Gradle中列出任务依赖项?

提问于
浏览
102

./gradle tasks 列出了"some"的任务 . 看http://gradle.org/docs/current/userguide/java_plugin.html有隐藏的未列出的 . 此外,其他插件将没有这样一个很好的漂亮的任务之间的依赖关系图 .

有办法吗?

  • 使用gradle列出所有插件中的所有任务

  • 列出了他们所依赖的任务和任务(有点像maven的 depenceny:tree 但是对于任务而言)

7 回答

  • 2

    您可以使用--all标志获取可用任务和任务依赖关系的更详细列表

    gradle tasks --all
    

    编辑:正如Radim在评论中所指出的,对于gradle 3.3和更新版本,此命令不报告依赖关系 .

  • 7

    列出任务和他们依赖的任务(有点像maven的依赖:树,但是对于任务)

    为此,您可以使用 --dry-run (或 -m )选项,该选项列出为了执行特定命令而执行的任务,但不执行命令,例如,

    gradle assemble --dry-run
    

    你可以找到更多here

  • 14

    您可以使用简单的用法尝试com.dorongold.task-tree插件:

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

    gradle --profile 干净的构建

    完成后,转到build / reports / profile文件夹并浏览.html文件 . 您将在一个漂亮的html页面中看到依赖项解析和其他信息 .

  • 12

    你可以把它粘在你的_979277中:

    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
            }
        }
    }
    

    然后用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
    
  • 90

    您可以使用Gradle.getTaskGraph()以编程方式访问任务图以在构建脚本中检查它

  • 18

    随着您的多项目的增长,我标记为正确的解决方案变得有点不整洁且难以阅读

    gradle tasks --all
    

    相反,我已经转向查看特定项目,使其更容易

    gradlew :full-httpproxy:tasks --all
    

    其中'full-httpproxy'是我项目的名称(和典型的目录一样) .

    然而,我很好奇如何列出主/根项目上的任务,并且在这里也有一个突出的问题

    How to list all tasks for the master project only in gradle?

    因为这样做现在似乎不可能 .

相关问题