gpt4 book ai didi

Gradle:任务中断时运行 finalizedBy (ctrl-c)

转载 作者:行者123 更新时间:2023-12-03 03:55:42 25 4
gpt4 key购买 nike

在 Gradle 中,如果后续操作被 ctrl-c 中断,是否可以运行 finalizedBy?我认为这意味着将任务绑定(bind)到系统关闭 Hook 。示例项目如下所示:

task prepare << {
println "preparing"
}
task longOperation << {
sleep 50000
}
longOperation.dependsOn prepare
task cleanup << {
println "clean"
}
prepare.finalizedBy cleanup
cleanup.mustRunAfter longOperation

理想情况下,无论“longOperation”的结果如何,我都希望“cleanup”运行,但是用户可能会不耐烦并且 ctrl-c 任务并且整个 gradle JVM 会关闭(可以理解)然后清理不会运行,a la :
$ ./gradlew -b /tmp/blah.gradle longOperation
Parallel execution is an incubating feature.
:prepare
preparing
> Building 33% > :longOperation^C

免责声明:这是来自 Gradle forum 的一个古老但尚未回答的问题.

最佳答案

我不相信,在 Gradle 的文档或 API 中我没有看到任何类型的 Hook SIGINT或类似的。

这可能是设计选择,因为这是低级别的。您可能需要使用 ProcessBuilder 创建自定义内容。并覆盖/实现 destroy() Process的方法.同样,这是低级工作,最好探索 Gradle 提供的替代方案。

一种可能的替代方法是始终调用 clean之前的任务longOperation .所以:

longOperation.dependsOn clean, prepare

但我认为更好的解决方案是利用 Worker API某种程度上来说。

关于Gradle:任务中断时运行 finalizedBy (ctrl-c),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60152979/

25 4 0
文章推荐: flutter - 'onPressed'不适用于 'Transform'抖动
文章推荐: c# - 在 Blazor WebAssembly 应用程序上加载请求 B2C 登录屏幕时出错
文章推荐: javascript - Azure B2C - MSAL 回调方法不调用返回 promise 的方法?
文章推荐: sorting - 按两个属性分别对List 进行排序,其中一个属性以升序排列,另一个属性以降序排列