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

有没有办法在Gradle中列出任务依赖项?,gradle,Gradle,/gradle tasks列出了一些任务。看着 有一些隐藏的未列出。另外,其他插件也不会有任务之间的依赖关系的漂亮图表 有办法去吗 使用gradle列出所有插件中的所有任务 列出任务以及它们所依赖的任务(有点像maven的依赖关系:tree但是对于任务) 在Gradle 3.3之前,您可以使用--all标志来获得可用任务和任务相关性的更详细列表: gradle tasks --all 出于性能原因,自Gradle 3.3起,依赖项报告已从此任务中删除。此更改及其基本原理记录在中。您可以使用Gr

/gradle tasks
列出了一些任务。看着 有一些隐藏的未列出。另外,其他插件也不会有任务之间的依赖关系的漂亮图表

有办法去吗

  • 使用gradle列出所有插件中的所有任务
  • 列出任务以及它们所依赖的任务(有点像maven的
    依赖关系:tree
    但是对于任务)

  • 在Gradle 3.3之前,您可以使用
    --all
    标志来获得可用任务和任务相关性的更详细列表:

    gradle tasks --all
    

    出于性能原因,自Gradle 3.3起,依赖项报告已从此任务中删除。此更改及其基本原理记录在中。

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

    Gradle任务树可以通过
    Gradle任务可视化--所有的
    尝试以下插件:

    Gradle和Talaiot图形: 查看以下内容:博客以图形方式列出查看任务和依赖项。这使用了freeopengraphviz工具Gephi()

    渐变任务树:和

    gradle visteg:

  • gradle-visteg插件:生成的文件可以通过
    dot
    实用程序进行后期处理

  • 例如,png图像生成如下:

    cd构建/报告/;dot-Tpng./visteg.dot-o./visteg.dot.png

  • 有关更多信息,请访问主页

    任何实际用于运行任务的任务(例如:
    build
    )都可以使用
    --profile
    选项在漂亮的HTML页面中查看

    渐变——轮廓清洁构建

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

    您可以尝试使用简单用法的插件:

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

    随着您的多项目的发展,我标记为正确的解决方案变得有点不合适,难以阅读

    gradle tasks --all
    
    取而代之的是,我转而关注一个具体的项目,使之变得更加容易

    gradlew :full-httpproxy:tasks --all
    
    其中,“完整httpproxy”是我的项目的名称(通常是目录)

    然而,我很好奇如何列出主/根项目上的任务,这里还有一个悬而未决的问题

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

    列出任务以及它们所依赖的任务(有点像maven的 Dependency:树(但用于任务)

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

    gradle assemble --dry-run
    

    您可以找到更多内容,您可以将其粘贴到您的
    构建中。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{
    println(“找到的任务图:$this”)
    println(“找到”+allTasks.size+“任务”)
    allTasks.forEach{task->
    println(任务)
    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
    

    您还可以为您的本地环境build.gradle添加以下插件,

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

    有一个新的插件:

    plugins {
        id 'org.barfuin.gradle.taskinfo' version '1.0.1'
    }
    
    然后您可以键入:

    ./gradlew tiTree assemble
    
    然后得到这样的结果:

    :assemble                             (org.gradle.api.DefaultTask)
    +--- :jar                             (org.gradle.api.tasks.bundling.Jar)
    |    `--- :classes                    (org.gradle.api.DefaultTask)
    |         +--- :compileJava           (org.gradle.api.tasks.compile.JavaCompile)
    |         `--- :processResources      (org.gradle.language.jvm.tasks.ProcessResources)
    +--- :javadocJar                      (org.gradle.api.tasks.bundling.Jar)
    |    `--- :javadoc                    (org.gradle.api.tasks.javadoc.Javadoc)
    |         `--- :classes               (org.gradle.api.DefaultTask)
    |              +--- :compileJava      (org.gradle.api.tasks.compile.JavaCompile)
    |              `--- :processResources (org.gradle.language.jvm.tasks.ProcessResources)
    `--- :sourcesJar                      (org.gradle.api.tasks.bundling.Jar)
    
    该插件还可以显示任务的执行顺序:

    In order to execute task ':assemble', the following tasks would be executed in this order:
    
      1. :compileJava      (org.gradle.api.tasks.compile.JavaCompile)
      2. :processResources (org.gradle.language.jvm.tasks.ProcessResources)
      3. :classes          (org.gradle.api.DefaultTask)
      4. :jar              (org.gradle.api.tasks.bundling.Jar)
      5. :javadoc          (org.gradle.api.tasks.javadoc.Javadoc)
      6. :javadocJar       (org.gradle.api.tasks.bundling.Jar)
      7. :sourcesJar       (org.gradle.api.tasks.bundling.Jar)
      8. :assemble         (org.gradle.api.DefaultTask)
    
    更多信息请访问。

    完全公开:我是gradle taskinfo的作者。

    如果插件不适合您,您可以在构建中使用此要点。gradle


    它似乎没有列出从任何地方的web下载依赖项的任务???运行任务eclipse可以清楚地下载东西,但不确定依赖项在哪里…没有办法使其过载?下载资源的操作没有绑定到专用任务。gradle中的依赖项将添加到配置中。只要您(在自己的任务实现中)或gradle(在自己提供的任务中)引用了此配置的文件,就会触发解析机制。这不会列出依赖项,至少在gradle 1.5或1.7中是这样。是它曾经这样做过,还是这是一个不完整的答案?只适用于3.3以上的gradle。中有一个更改删除了此输出。gradle.getTaskGraph()仅显示将在当前gradle生成中执行的任务,并且此taskGraph仅在执行阶段可用。报告不包含有关任务之间依赖关系的任何信息。它只是按顺序列出生成过程中执行的所有任务。它没有列出任务树或任务依赖项,只是列出了哪些任务会被执行。@bcampolo有什么区别?要获得更清晰的输出,请使用
    --无重复
    。来源:我的天啊,非常感谢你。这看起来有点像一个图表,但它实际上只是每个任务所依赖的。它是包含每个节点的父节点的节点列表。因此,如果您的图形看起来像
    A,那么它应该是一个图形,但是呈现一个图形是非常重要的。上述代码的输出仅列出了任务的直接依赖项。您可以添加所需的存储库代码吗?它位于Gradle插件门户中,不需要额外的存储库信息@sridm,我想我的项目的repo设置限制了我的团队上传的插件。谢谢
    
    In order to execute task ':assemble', the following tasks would be executed in this order:
    
      1. :compileJava      (org.gradle.api.tasks.compile.JavaCompile)
      2. :processResources (org.gradle.language.jvm.tasks.ProcessResources)
      3. :classes          (org.gradle.api.DefaultTask)
      4. :jar              (org.gradle.api.tasks.bundling.Jar)
      5. :javadoc          (org.gradle.api.tasks.javadoc.Javadoc)
      6. :javadocJar       (org.gradle.api.tasks.bundling.Jar)
      7. :sourcesJar       (org.gradle.api.tasks.bundling.Jar)
      8. :assemble         (org.gradle.api.DefaultTask)