首页 > 解决方案 > 如何使用任务 gradle 删除文件

问题描述

我正在尝试使用 gradle 任务删除文件

task remove {
    exec {
        working dir file/file2
        commandLine 'myFirstCommandLineWhichWorks'
        commandLine "rm", "'myFile.txt'"
    }
}

我收到错误“启动进程'命令'rm'出现问题”

注意:我不想使用task something(type: Delete)并且没有外部脚本。它必须来自命令行。有没有可能?

标签: androidgradlegroovyterminal

解决方案


我正在尝试使用 gradle 任务删除文件

Gradle 为这个用例提供了一个任务类型 ( Delete) 和一个方法 ( delete)。

注意:我不想使用task something(type: Delete)

为什么?如果你不想使用 Gradle 功能,那么就不要使用 Gradle。

它必须来自命令行。

正如其他人所提到的,该命令rm在 Windows 系统上不可用。这是 Gradle 抽象此功能的原因之一。


您的代码还有另一个问题:您定义了一个完全不相关的 Gradle 任务,因为它不会执行任何功能。Gradle 区分配置阶段执行阶段<code>任务定义的内部闭包task <name> { <code> }将直接执行(在配置阶段)。只有(内部)任务操作doFirstdoLast闭包在执行实际任务时执行(从命令行或作为任务依赖项)。

要解决这个问题,要么Delete直接使用类型的任务(无论如何你都应该这样做),使用类型的任务Exec或将exec方法包装在doFirst/doLast闭包中:

task remove(type: Delete) {
    delete 'myFile.txt'
}

task remove(type: Exec) {
    commandLine 'del', 'myFile.txt', '/q'
}

task remove {
    doFirst {
        exec {
            commandLine 'del", 'myFile.txt', '/q'
        }
    }
}

推荐阅读