【问题标题】:Iterative exec task迭代执行任务
【发布时间】:2014-12-24 21:10:40
【问题描述】:

在下面提供的代码中,我可以打印目录中的每个文件名,但是当它到达 Exec 命令时,它只对最后一个文件执行 Exec。

task frmf2xml(type:Exec)  {
    new File('src/orca/').eachFile {file ->
        if(file.name.endsWith(".fmb")){
            println file
            commandLine 'cmd', '/c', 'frmf2xml.bat', file, 'OVERWRITE=YES'
        }
   }
}

我希望它在每个文件上运行该工具

【问题讨论】:

  • 你从这个链接复制了确切的问题和代码,为什么? forums.gradle.org/gradle/topics/iterative_exec
  • @chrki LOL 是的,当然是在寻找解决方案。顺便说一句,您将此代码链接到 your great answer
  • @chrki 我想知道它是否可以解决,并且给了你赏金,顺便说一句:链接中提供的解决方案不起作用。

标签: android groovy gradle


【解决方案1】:

其实我找到了一个解决方案,使用execute()

task frmf2xml()  {
    new File('src/orca/').eachFile {file ->
        if(file.name.endsWith(".fmb")){                
            def cmd = "cmd /c frmf2xml.bat ${file} OVERWRITE=YES"
            def result = cmd.execute();
            result.waitFor();
        }
   }
}

【讨论】:

  • 至少,您必须用doLast::task frmf2xml { doLast { ... } } 包裹整个任务主体。否则,命令将在每次 Gradle 调用(无论调用哪个任务)和任何任务运行之前(配置与执行阶段)执行。与 Groovy 的 String#execute 不同,使用 Gradle 的 project.exec { ... } 更为惯用。
猜你喜欢
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多