gpt4 book ai didi

Gradle exec 任务失败,出现 "execCommand == null!"

转载 作者:行者123 更新时间:2023-12-03 02:54:17 26 4
gpt4 key购买 nike

我的 中有以下任务build.gradle 文件:

task myTask(type:Exec) {
def stdout = new ByteArrayOutputStream()
exec {
commandLine 'cmd', '/c', 'whoami'
standardOutput = stdout;
}
println "Output: $stdout"
}

当我使用 ./gradlew myTask 运行我的任务时,我得到以下输出:
> Configure project :
Output: retrovius


> Task :myTask FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':myTask'.
> execCommand == null!

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 2s
1 actionable task: 1 executed

该任务成功输出我的用户名(retrovius),然后无论如何都会失败。关于我做错了什么的任何指示?

最佳答案

根据您想要实现的目标,您找到的答案可能仍然不正确。

所有任务都有两个主要阶段:配置和执行。您放在任务定义最外层 block 中的所有内容都是配置的一部分。和 exec每当评估该代码块时,方法实际上都会执行命令。所以当你输入:

task myTask() {
def stdout = new ByteArrayOutputStream()
exec {
commandLine 'cmd', '/c', 'whoami'
standardOutput = stdout;
}
println "Output: $stdout"
}

那么这意味着你正在运行 whoami命令,无论您指定什么任务。如果你运行 gradle -i help ,它将打印名称。我希望这不是你想要的。

大多数时候,您只想在任务实际执行时才运行命令。因此,如果您希望命令仅在键入 gradle -i myTask 时运行,您需要将其推迟到执行阶段。有两种方法可以做到这一点。

要么你可以把所有东西都放在 doLast像这样 block :
task myTask() {
doLast {
def stdout = new ByteArrayOutputStream()
exec {
commandLine 'cmd', '/c', 'whoami'
standardOutput = stdout
}
println "Output: $stdout"
}
}

或者您使用 Exec键入,就像您已经尝试过的一样。它对您不起作用的原因是您需要使用您喜欢的命令来配置它 - 而不是通过 exec 实际运行命令方法。它可能看起来像这样:
task myTask(type: Exec) {
commandLine 'cmd', '/c', 'whoami'
standardOutput = new ByteArrayOutputStream()
doLast {
println "Output: $standardOutput"
}
}

你也可能摆脱了 cmd /c部分。和 println只能用于调试 - 使用 logger.info (或 .warn 等)如果您需要向用户输出某些内容。

关于Gradle exec 任务失败,出现 "execCommand == null!",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58542083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com