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

标签 gradle

在 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/

相关文章:

java - 如何在多项目中使用 Gradle 配置 Eclipse?

android - 在 '-keepclass' proguard android上缺少EOF

android - 在 gradle 命令中添加变量

java - Libgdx 无法确定 Java 版本 11.0.1

gradle - 任务 ':app:flutterBuildDebug' 执行失败

java - 不要将 gradle 子项目安装为外部依赖项

android-maven-plugin 工作得很好为什么要迁移到 gradle? (适用于 Android 项目)

android - Android Studio中的同步项目失败

Android Studio、Gradle 根据 flavor 构建时使用不同的代码

android - Exoplayer r1.5.2 无法解析 com.google.android.exoplayer :exoplayer:r1. 5.2