Estoy intentando chmod + w un directorio completo. Necesito modificarlo y se espera que sea de solo lectura, ya que está administrado por un sistema de administración de configuración forzoso.

Mi código parece funcionar correctamente:

String path = projectDir.toString() + '/src/main/java/com/<snip>'

task chmod(type:Exec) {
   println("chmoding all in $path")

   FileTree  javaFiles = fileTree(path)
   javaFiles.each { File javaFile ->
      String filename = path + "/" + javaFile.name
      commandLine 'chmod', 'a+w', filename
      println "Chmoding $filename"
   }
}

La ruta impresa es la correcta, pero solo la última iteración está realmente modificada. Intenté mover el commandLine por encima de println, pensando que intentaré la depuración de escopeta pero fue en vano.

Una alternativa que probé es ejecutar commandLine una vez con

commandLine 'bash', 'chmod', 'a+w', '/src/main/java/com/<snip>/*'

Pero también falló.

1
Roy Falk 19 feb. 2018 a las 16:18

2 respuestas

La mejor respuesta

La tarea Exec se ejecuta una vez, no varias veces. Estás llamando a Exec.setCommandLine(...) varias veces en la fase de configuración. Cuando se ejecuta la tarea Exec (en la fase de ejecución), simplemente ejecuta la última.

Probablemente quieras llamar a Project.exec(...) varias veces.

Eg:

ext {
    path = 'src/main/java/com/<snip>'
}
task chmod {
    inputs.dir path
    doLast {
        fileTree(path).each { File javaFile ->
            exec {
                println "Chmoding $javaFile"
                commandLine 'chmod', 'a+w', javaFile.absolutePath
            }
        }
    }
}
2
lance-java 19 feb. 2018 a las 13:48

Si desea hacerlo a través de un comando, intente

commandLine 'bash', 'chmod', '-R', 'a+w', '/src/main/java/com/<snip>'
1
ToYonos 19 feb. 2018 a las 13:40