簡體   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