[英]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> 將直接執行(在配置階段)。 只有(內部)任務操作、 doFirst
和doLast
閉包在實際任務執行時執行(從命令行或作為任務依賴項)。
要解決這個問題,要么直接使用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.