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

hmae6n7t  于 2023-03-08  发布在  其他
关注(0)|答案(1)|浏览(250)

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

但这会引发一个异常

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.

如果我在上面的命令中省略--settings-file,则会正常工作,Gradle会选择alt-build.gradle
出了什么问题,我该如何解决?
理想情况下,我希望能够运行gradle,即使有一个settings.gradle文件不工作。

$ cat <<-EOF > alt-build.gradle
    task test { /* ... */ }
EOF
$ cat <<-EOF > alt-settings.gradle
    rootProject.name = 'custom-name'
EOF

$ cat <<-EOF > settings.gradle
    This will not compile
EOF
$ cat <<-EOF > build.gradle
    This will not compile
EOF

$ gradle \
    --settings-file alt-settings.gradle \
    --build-file alt-build.gradle \
    tasks --all

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

rnmwe5a2

rnmwe5a21#

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

rootProject.name = 'custom-name'
rootProject.buildFileName = 'alt-build.gradle'

alt-build.gradle:

task test { /* ... */ }

Gradle调用:

gradle --settings-file alt-settings.gradle tasks --all

这样一来,默认的构建和设置文件根本就不会被使用,它们是否工作也没有关系。

针对较新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")
}

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

gradle tasks --all

如果您想要运行自定义构建,您需要使用-D命令行选项调用gradle。

gradle -Dprofile=custom tasks --all

相关问题