打印配置中的文件的Gradle任务

amrnrhlw  于 2023-01-21  发布在  其他
关注(0)|答案(1)|浏览(160)

我刚接触Gradle,正在尝试将一个大型Maven构建版本转换到Gradle。我正在尝试调试依赖关系问题,希望打印出配置中的所有文件。这是一个多模块构建版本,我尝试在顶层或感兴趣的模块中定义任务。在这两种情况下,我都看到了任务的输出,但没有列出任何文件。
在最高层,我尝试了这样的方法:

task printFilesRoot {
  dependsOn 'build'
  doLast {
    println "From root, printing artifacts"
    project(":some-module").configurations.myconfig.allArtifacts.each { art -> println "Artifact: " + file }

    println "From root, printing files"
    project(":some-module").configurations.myconfig.allArtifacts.getFiles().each { file -> println "File: " + file }
  }
}

在模块中,我尝试了类似的方法:

task printFilesModule {
  doLast {
    println "From module, printing artifacts"
    configurations.myconfig.allArtifacts.each { art -> println "Artifact: " + file }

    println "From module, printing files"
    configurations.myconfig.allArtifacts.getFiles().each { file -> println "File: " + file }
  }
}

我尝试过直接调用任务,或者使另一个任务(如build)依赖于其中一个任务。在每种情况下,我看到的唯一输出都是“打印工件”和“打印文件”语句,没有实际数据。
我想我尝试打印此数据的方式可能有问题,但问题是什么呢?我知道Gradle有两个阶段-配置和执行。我以为通过将任务代码放在“doFirst”或“doLast”块中,代码将在任务运行时执行,而不是在配置阶段执行,但我是否误解了什么?

6ljaweal

6ljaweal1#

首先,您确定需要创建自定义任务吗?

  • ./gradlew dependencies将列出所有子项目中的依赖项,
  • (或运行./gradlew :some-module:dependencies以仅运行some-module中的任务)
  • 构建扫描也是如此
  • Project Report plugin还可以生成报告,Build Dashboard plugin将聚合这些报告。
列出配置中的所有文件

Configuration.getAllArtifacts()将只返回项目,而不返回依赖项。项目由项目生成,不是项目获取的依赖项。
由于Configuration只实现FileCollection,而FileCollection又实现java.lang.Iterable<java.io.File>,因此您只需迭代配置即可。
(由于我对Gradle Groovy不熟悉,我改编了Gradle文档中的一个示例来构建一个fat jar。

// build.gradle

tasks.register("printFilesModule") {
  doLast {
    configurations.runtimeClasspath.each { ... }
  }
}

我尝试过直接调用任务,或者使另一个任务(如build)依赖于其中一个任务。在每种情况下,我看到的唯一输出都是"打印工件"和"打印文件"语句,没有实际数据。
除了使用getAllArtifacts()之外,由于您使用的是名为myconfig的自定义配置,它们可能只是空的,没有任何依赖项?最好坚持使用标准Gradle插件提供的配置(例如,Java插件创建implementationcompileOnlyruntimeOnly等)。
我以为通过将任务代码放在"doFirst"或"doLast"块中,代码将在任务运行时执行,而不是在配置阶段执行,但是我是否误解了什么?
不,你已经正确地定义了任务,没有问题。

相关问题