20

我有一个运行简单 JavaExec 的任务。

我似乎无法工作的是能够在每次迭代 Filetree 对象(包含文件)时多次运行 JavaExec,而我想一个一个地传递给主 JavaExec 类。不幸的是,编译器或代码生成工具不接受目录作为 arg,因此我需要将文件作为每个循环的 arg 传递。这是我所拥有的:

task generateClasses(type: JavaExec) {
   description = 'Generates Json Classes...'
   classpath configurations.all
   main = "org.apache.gora.compiler.Compiler"
   FileTree tree = fileTree(dir: 'src/main')
   tree.include '**/*.json'
       tree.each {File file ->
       println file
       args = [ "src/main/json/$file.name", "$buildDir/generated-src/src/main/java" ]
   }    

}

编译Java.source generateClasses.outputs.files,sourceSets.main.java

从上面它可以工作,我列出了所有文件,但 JavaExec 在最后一个文件读取时被调用一次。

我该如何解决上述问题?请帮忙。

4

1 回答 1

34

使用project.javaexec方法怎么样?请参阅API 文档DSL 参考

task generateClasses {
  description = 'Generate Json Classes'
  fileTree(dir: 'src/main', include:'**/*.json').each { file ->
    doLast {
      javaexec {
        classpath configurations.all
        main = 'org.apache.gora.compiler.Compiler'
        args = ["src/main/json/$file.name", "$buildDir/generated-src/src/main/java"]
      }
    }
  }
}
于 2012-11-21T13:34:17.473 回答