0

我创建了一些自定义 Gradle 任务,对构建执行分析,我将在进行某些类型更改时使用它们(例如,在升级库版本时查看包含的依赖项中的更改)。这些任务是为了我自己的利益,而不是我想要致力于源代码控制的事情。因此,理想情况下,我希望它们在外部指定build.gradle并以不需要更改任何已提交的构建文件的方式包含在内。否则,自定义任务无疑会意外地包含在提交中,并且需要稍后退出。

具体来说,这是一个打印所有编译时依赖项的任务的简化版本:

task dependencyList {
    doLast {
        println "Compile dependencies:"
        def selectedDeps = project.configurations.compileClasspath.incoming.resolutionResult.allDependencies.collect { dep ->
            "${dep.selected}"
        }
        selectedDeps.unique().sort().each { println it }
    }
}

build.groovy如何在不对通常提交给项目源代码控制的其他文件或其他文件进行任何更改的情况下针对我的 Gradle 构建执行此任务?

4

1 回答 1

0

为此可以使用初始化脚本,将自定义任务添加到构建中的项目中

allprojects {
    task dependencyList {
        doLast {
            println "Compile dependencies:"
            def selectedDeps = project.configurations.compileClasspath.incoming.resolutionResult.allDependencies.collect { dep ->
                "${dep.selected}"
            }
            selectedDeps.unique().sort().each { println it }
        }
    }
}

Gradle 提供了多种使用初始化脚本的方法,这些方法在特性的文档中列出:

  • 在命令行上指定一个文件。命令行选项是-I--init-script后跟脚本的路径。[...]
  • 在目录中放置一个名为init.gradle(或init.gradle.ktsKotlin)的USER_HOME/.gradle/文件。
  • .gradle将一个以(或.init.gradle.ktsKotlin)结尾的文件放在USER_HOME/.gradle/init.d/目录中。
  • 在 Gradle 发行版的目录中放置一个以.gradle(或.init.gradle.ktsKotlin 结尾)结尾的文件。GRADLE_HOME/init.d/[...]

对于仅应出现在按需构建中的任务,--init-script命令行选项将是要使用的选项。

gradle --init-script /path/to/dependency-list.gradle dependencyList
于 2021-07-03T04:39:11.957 回答