在 gradle Copy 任务中动态设置文件权限

Guy*_*ord 2 file-permissions gradle

我正在尝试解决一个问题,即我的构建中的依赖项是一个包含一些只读文件的 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
  }
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用。如果我注释掉 fileMode 行,则 println 会正确列出旧文件模式和新文件模式,并为所有文件启用写入位。如果我将代码保留原样,那么 zip 中的所有文件都将使用第一个文件的 newMode 进行提取。

这似乎不是一个不合理的尝试,但我显然做错了什么。有什么建议?

Mic*_*ter 5

基于此线程,考虑Sync 任务。具体来说:

task stageZip(type: Sync) {
    from zipTree('data/data.zip')
    into 'staging'
    fileMode 0644
}
Run Code Online (Sandbox Code Playgroud)

我已经把工作示例(我理解这个问题)这里