当命令行中 运行 "./gradlew <task>" 时,读取的是什么文件?

When running "./gradlew <task>" in command line, what file is read?

我做了一些挖掘,但没有找到太多信息。

我最好的猜测是 build.gradle 文件是默认文件,但我很好奇其行为以及读取的文件。

在这种情况下,build.gradle 是在您 运行 gradlew 所在的同一目录下读取的。其他也可以读取的文件是 settings.gradle,但不能在那里声明任务。

运行 不同的 gradle 脚本使用 -b 开关并将路径传递给脚本。

此外,您为什么认为可能会读取任何其他文件?

虽然另一个答案涵盖了所有构建的 99.99%,但它并不完整。

完整的命令是./gradlew [-b / --build-file <build.file>] [-c / --settings-file <settings.file>]。当你 运行 它时,那些指定的 <build.file><settings.file> 将被用来配置构建和相应的设置。设置文件很特殊:它配置你的 Project objects on the very early stages of your build and it can actually override 它是构建文件。

示例如下(抱歉已弃用 <<,仅用于缩短代码):

默认build.gradle,没有settings.gradle:

build.gradle:

task hello << { println "Hello" }

结果:

$ ./gradlew hello
:hello
Hello

自定义build.gradle,无settings.gradle:

custom.gradle:

task hello << { println "Hi!" }

结果:

$ ./gradlew -b custom.gradle hello
:hello
Hi!

自定义build.gradle,配置在settings.gradle:

custom.gradle:

task hello << { println "Konnichi wa" }

settings.gradle:

rootProject.buildFileName = 'custom.gradle'

结果:

./gradlew hello # note that we don't need any flags here as with a default build
:hello
Konnichi wa

自定义build.gradle,自定义配置settings.gradle:

custom.gradle:

task hello << { println "Aloha!" }

settings.custom:

rootProject.buildFileName = 'custom.gradle'

结果:

./gradlew -c settings.custom hello # note how we pass custom settings file which, in turn, specifies custom `build.gradle`
:hello
Aloha!

这主要是花哨而不实用,但您可以结合这些方法来存储,例如,将所有构建文件存储在一个单独的目录中(覆盖 buildFileName)。或者你可以有类似 "build profiles" 的东西,有多个 settings.gradle,有不同的 include 集(设置也用于将项目包含到你的构建中,所以你可以有像 "full build"、"ui"、"external clients" 等等)。

唯一的限制是你的想象力。