繁体   English   中英

如何使用任务 gradle 删除文件

[英]How to remove file using a task gradle

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

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

我收到错误消息“启动进程‘command‘rm’时出现问题”

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

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

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

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

为什么? 如果您不想使用 Gradle 功能,则根本不要使用 Gradle。

它必须来自命令行。

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


您的代码还有另一个问题:您定义了一个完全不相关的 Gradle 任务,因为它不会执行任何功能。 Gradle区分配置阶段执行阶段 任务定义task <name> { <code> } <code>包内的 <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'
        }
    }
}

如果您使用的是 Windows,则应使用命令“del /q”而不是“rm”

task remove {

   exec {

   working dir file/file2
   commandLine 'myFirstCommandLineWhichWorks'
   commandLine "del /q", "'myFile.txt'"

   }

}

正如我在评论中提到的,我建议使用 Groovy 删除文件,因为从命令行执行特定于环境的命令我们正在失去互操作性,因此当您将环境切换到 Mac 或 Linux 时,该命令将不再起作用。 也可以尝试使用我从这篇 SO 帖子中获得的这段代码: Groovy 执行 shell 命令

task remove {

    def sout = new StringBuilder(), serr = new StringBuilder()
    def proc = 'del myFile.txt /q'.execute()
    proc.consumeProcessOutput(sout, serr)
    proc.waitForOrKill(1000)
    println "out> $sout err> $serr"

}

使用普通的 groovy 方法应该非常简单:

task remove { 
    String filename = "myFile.txt"  
    boolean fileSuccessfullyDeleted =  new File(filename).delete()  
    println fileSuccessfullyDeleted 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM