Gradle多次调用commandLine - 只运行最后一次

时间:2018-02-19 13:18:50

标签: gradle android-gradle

我试图chmod + w整个目录。我需要对其进行修改,并且它应该是只读的,因为它由perforce配置管理系统管理。

我的代码似乎运行正常:

 gen text = "replace A = " + string(_n) +  " if inrange(A, " + string(A) + "," + string(B) + ")" 

打印路径是正确的,但只有最后一次迭代实际上是chmoded。我尝试将commandLine移到println上面,以为我会尝试使用鸟枪调试,但无济于事。

我尝试的另一种方法是使用

运行一次commandLine
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"
   }
}

但它也失败了。

2 个答案:

答案 0 :(得分:2)

Exec任务执行一次,而不是多次。您在配置阶段多次呼叫Exec.setCommandLine(...)。当Exec任务执行时(在执行阶段),它只执行最后一个任务。

您可能希望多次致电Project.exec(...)

例如:

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
            }
        }
    }
}

答案 1 :(得分:1)

如果您想通过一个命令执行此操作,请尝试

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