我试图解决一个问题,我的构建中的依赖项是一个包含一些只读文件的zip文件。当我将该zip作为构建的一部分解压缩时,我最终在暂存文件夹中得到了只读文件,它们阻止了任务在未来运行,因为它们不能被覆盖。
在找到在Gradle拷贝任务中强制覆盖的方法之前,我一直在尝试找到一种方法来更改只读文件的文件模式,而不会从需要执行位的文件中删除执行位。
我想到了这个:
task stageZip(type: Copy) {
from({ zipTree(zipFile) })
into stagingFolder
eachFile {
println "${it.name}, oldMode: ${Integer.toOctalString(it.mode)}, newMode: ${Integer.toOctalString(it.mode | 0200)}"
fileMode it.mode | 0200
}
}
但这并不起作用,如果我注解掉fileMode行,那么println会正确地列出旧的和新的文件模式,并为所有文件启用write位;如果我保持代码不变,那么zip中的所有文件都会使用第一个文件的newMode来提取。
这看起来并不是一件不合理的事情,但我显然做错了什么。有什么建议吗?
3条答案
按热度按时间db2dz4w81#
在this thread的基础上,考虑Sync task。具体而言:
我已经给出了一个工作示例(就我对问题的理解而言)here。
ipakzgxi2#
这里有一个方法可以回答关于文件权限的问题,这个例子发布在GitHub here上。
首先,考虑将
w
添加到文件的方法:然后,Gradle任务可以如下所示:
58wvjzkj3#
在一个rpm任务中为我工作,该任务与copyspec一起工作