2012-11-20 118 views
14

我有一個運行簡單JavaExec的任務。如何使用Gradle在單個任務中多次執行JavaExec?

我似乎無法正常工作的是能夠在遍歷一個Filetree對象(包含文件)的同時多次運行JavaExec,而每個對象都要一個接一個地傳遞到主JavaExec類中。不幸的是編譯器或代碼生成工具,因爲它不接受一個目錄作爲一個參數,所以我需要傳遞文件作爲一個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" ] 
    }  

}

compileJava.source generateClasses.outputs.files,sourceSets.main.java

從上面它的工作原理和我列出的所有文件,但JavaExec是隻是在最後一次讀取文件時調用過一次。

如何解決上述問題?請幫忙。

+0

顯然打破了上述成單獨的任務和乳寧JavaExec n次將是一個解決方案,但是這使得構建文件太冗長,而不是靈活的(我必須指定路徑的每個文件)。 – user983022

回答

23

如何使用project.javaexec方法?請參閱API DocumentationDSL ref

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