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

Dak*_*ker 4 java command-line gradle gradlew build.gradle

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

我最好的猜测是该build.gradle文件是默认文件,但我对行为和读取的文件感到好奇。

mad*_*ead 8

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

完整的命令是./gradlew [-b / --build-file <build.file>] [-c / --settings-file <settings.file>]. 当你运行它,这些规定<build.file><settings.file>将用于配置构建和它相应的设置。设置文件很特别:它Project在构建的早期阶段配置您的对象,并且它实际上可以覆盖它的构建文件。

以下是示例(对于已弃用的 抱歉<<,它仅用于缩短代码):

默认build.gradle,没有settings.gradle

build.gradle

task hello << { println "Hello" }
Run Code Online (Sandbox Code Playgroud)

结果:

$ ./gradlew hello
:hello
Hello
Run Code Online (Sandbox Code Playgroud)

自定义build.gradle,没有settings.gradle

custom.gradle

task hello << { println "Hi!" }
Run Code Online (Sandbox Code Playgroud)

结果:

$ ./gradlew -b custom.gradle hello
:hello
Hi!
Run Code Online (Sandbox Code Playgroud)

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

custom.gradle

task hello << { println "Konnichi wa" }
Run Code Online (Sandbox Code Playgroud)

settings.gradle

rootProject.buildFileName = 'custom.gradle'
Run Code Online (Sandbox Code Playgroud)

结果:

./gradlew hello # note that we don't need any flags here as with a default build
:hello
Konnichi wa
Run Code Online (Sandbox Code Playgroud)

自定义build.gradle,在 custom 中配置settings.gradle

custom.gradle

task hello << { println "Aloha!" }
Run Code Online (Sandbox Code Playgroud)

settings.custom

rootProject.buildFileName = 'custom.gradle'
Run Code Online (Sandbox Code Playgroud)

结果:

./gradlew -c settings.custom hello # note how we pass custom settings file which, in turn, specifies custom `build.gradle`
:hello
Aloha!
Run Code Online (Sandbox Code Playgroud)

这很花哨而且不实用,但是您可以组合这些方法来存储,例如,您在一个单独的目录中构建的所有文件(覆盖buildFileName)。或者,您可以拥有多个类似“构建配置文件”的内容settings.gradle,具有不同的includes集(设置也用于将项目包含到您的构建中,因此您可以拥有“完整构建”、“ui”、“外部客户端”和很快)。

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