如何自动接受 `build --scan` 的 Gradle ToS 并且仍然能够在不扫描的情况下运行构建?

问题描述 投票:0回答:3

我正在使用 Gradle 4.6,它允许我使用以下命令运行 build scans

--scan
选项,无需明确应用或下载 额外的插件非常棒。然而这迫使我添加
buildScan
我的 build.gradle 文件中接受服务条款。

像这样:

buildScan {
    termsOfServiceUrl = 'https://gradle.com/terms-of-service'
    termsOfServiceAgree = 'yes'
}

当我随后在没有

gradle build
选项的情况下运行
--scan
时,我 收到以下错误消息:

> Could not find method buildScan() for arguments…

我不想每次都修改build.gradle文件 想要/不想要扫描。我不想明确应用该插件 (防火墙问题)并且我没有机会接受以下条款 我也看到了命令行上的服务记录。

谁能告诉我我做错了什么?

这个问题的格式类似于引用,因为它已经在 Gradle 论坛 上被问过。但没有答案。我正在使用 Gradle 4.10.2,问题仍然存在。我决定在这里引起更多关注这个问题。

gradle build-error
3个回答
34
投票

只需测试

buildScan

是否存在
if (hasProperty('buildScan')) {
    buildScan {
        termsOfServiceUrl = 'https://gradle.com/terms-of-service'
        termsOfServiceAgree = 'yes'
    }
}

同样可以在像这样的 kotlin 构建文件中完成 - (感谢这个答案):

if (hasProperty("buildScan")) {
    extensions.findByName("buildScan")?.withGroovyBuilder {
        setProperty("termsOfServiceUrl", "https://gradle.com/terms-of-service")
        setProperty("termsOfServiceAgree", "yes")
    }
}

请参阅连接到 scans.gradle.com 文档了解更多详细信息。


0
投票

这可能不是一个好的或正确的解决方案,但这里有一个解决方法:使用

try
/
catch
来吞掉错误,例如:

try {
    buildScan {
        termsOfServiceUrl = 'https://gradle.com/terms-of-service'
        termsOfServiceAgree = 'yes'
    }
} catch (MissingMethodException e){
   // This isn't the exception you're looking for
}

0
投票

您可以使用

echo
命令通过管道将“是”作为答案

例如,

echo "yes" | ./gradlew build --scan
© www.soinside.com 2019 - 2024. All rights reserved.