[英]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.