Gradle中的运行命令行不正确

时间:2015-03-25 01:53:15

标签: gradle cmd

以下是我的代码:

task encodeFile(type: Exec) {
    workingDir dirName
    def files = file(dirName).listFiles()
    files.each { File file ->
        if (file.isFile()) {
            println " *** $file.name *** "
            def tmpName = "tmp$file.name"
            println " === $tmpName"
            commandLine "cmd", "/c native2ascii $file.name $tmpName"
            commandLine "cmd", "/c del $file.name"
            commandLine "cmd", "/c move $tmpName $file.name"
//            commandLine "cmd", "/c move $file.name $tmpName"
            println " === $file.name is moved"
            println "----------------------------------"

//            """executable "native2ascii" "$file.name" "$tmpName""""".execute()
        }
    }
}

我正在尝试对指定文件夹下的所有文件进行编码以进行本地化。但是当我运行上面的代码时,只有最后一个文件按预期更改。我打印了一些消息,所有文件都被迭代了。

有谁知道这里发生了什么?

2 个答案:

答案 0 :(得分:0)

是的,每个在文件对象上调用的最后一次迭代都会设置配置并获胜 - 您可以更改传递的文件的顺序来验证它。

默认情况下,

native2ascii任务是内置的gradle,您可以尝试例如:

task n2a {
   doLast {
      ant.native2ascii(
         src   : project.file('n2a-src'),
         dest  : project.file('n2a-dest') 
      )
   }
}

似乎没有必要通过Exec任务来完成。

答案 1 :(得分:-1)

对我而言,这是正常的:

processResources {
    "*.properties, *.txt".split(",").each {pattern ->
        filesMatching ("**/" + pattern.trim ()) {
            filter {
                it
                    .replace ('${projectVersion}', project.version)
                    .replace ('${projectName}', project.name)
            }
        }
    }

    doLast {
        if (file (processResources.destinationDir).exists()) {
            ant.native2ascii (
                src: "${processResources.destinationDir}",
                dest: "${processResources.destinationDir}/../ascii",
                includes: '**/*.properties',
            )

            copy {
                from "${processResources.destinationDir}/../ascii"
                into processResources.destinationDir
            }
        }
    }
}