如何使用自定义 gradle 构建文件和 gradle 设置文件

Min*_*iMe 5 build gradle

gradle 命令有一堆标志来自定义其环境 [1]。其中有--build-file--settings-file。但我似乎无法让他们按照我期望的方式工作。

我期望以下内容能够发挥作用

$ cat <<-EOF > alt-settings.gradle
    rootProject.name = 'custom-name'
EOF
$ cat <<-EOF > alt-build.gradle
    task test { /* ... */ }
EOF
$ gradle \
    --settings-file alt-settings.gradle \
    --build-file alt-build.gradle \
    tasks --all
Run Code Online (Sandbox Code Playgroud)

但这会引发异常

Build file './alt-build.gradle' is not part of the build defined by settings file './alt-settings.gradle'. If this is an unrelated build, it must have its own settings file.
Run Code Online (Sandbox Code Playgroud)

如果我--settings-file从上面的命令中省略,事情就会起作用,并且 gradle 会启动alt-build.gradle

出了什么问题,我该如何解决这个问题?

gradle理想情况下,我希望即使在 settings.gradle 文件不起作用的情况下也能够运行。例如在下面的场景中

Build file './alt-build.gradle' is not part of the build defined by settings file './alt-settings.gradle'. If this is an unrelated build, it must have its own settings file.
Run Code Online (Sandbox Code Playgroud)

[1] https://docs.gradle.org/current/userguide/command_line_interface.html#environment_options

cko*_*idl 4

您需要在自定义设置文件中配置自定义构建文件,然后在调用 gradle 时仅使用 --settings-file 参数。

替代设置.gradle:

rootProject.name = 'custom-name'
rootProject.buildFileName = 'alt-build.gradle'
Run Code Online (Sandbox Code Playgroud)

替代构建.gradle:

task test { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

梯度调用:

gradle --settings-file alt-settings.gradle tasks --all
Run Code Online (Sandbox Code Playgroud)

这样,根本不使用默认的构建和设置文件,并且它们是否工作并不重要。

更新较新的 gradle 版本(在 haridsv 发表评论后,使用版本 8.0.1 进行测试):

gradle 升级指南 ( https://docs.gradle.org/8.0.1/userguide/upgrading_version_7.html#configuring_custom_build_layout ) 提供了有关如何处理自定义构建布局的建议。您可以在设置文件和/或构建文件中使用 if 语句来获得不同的构建,如下所示

if (System.getProperty("profile") == "custom") {
    println("custom profile")
} else {
    println("default profile")
}
Run Code Online (Sandbox Code Playgroud)

else 分支包含您的默认构建,您可以通过调用 gradle 来执行它,如下所示:

gradle tasks --all
Run Code Online (Sandbox Code Playgroud)

如果你想运行自定义构建,你需要使用命令行选项调用 gradle -D。就像这样:

gradle -Dprofile=custom tasks --all
Run Code Online (Sandbox Code Playgroud)