2012-11-20 9 views
14

Ich habe eine Aufgabe, die eine einfache JavaExec ausführt.Wie kann JavaExec mehrere Male in einer einzigen Task mit Gradle ausgeführt werden?

Was ich nicht funktionieren kann, ist die Fähigkeit, die JavaExec mehrere Male während der Iteration eines Filetree-Objekts (mit den Dateien) jedes von, während ich nacheinander in die Main JavaExec Klasse übergeben möchte. Unglücklicherweise akzeptiert der Compiler oder das Codegenerierungsprogramm ein Verzeichnis nicht als Argument, daher muss ich die Datei als Argument pro Schleife übergeben. Hier ist, was ich habe:

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

Aus dem obigen funktioniert und ich alle Dateien aufgelistet, aber die JavaExec ist rief nur einmal auf die allerletzte Datei zu lesen.

Wie gehe ich oben an? Bitte helfen Sie.

+0

Offensichtlich ist die oben in getrennte Aufgaben zu brechen und runing JavaExec n Zeiten wäre eine Lösung, aber das macht die Build-Datei zu ausführlich und nicht flexibel (ich habe Pfad zu jeder Datei angeben). – user983022

Antwort

23

Wie wäre es mit der project.javaexec Methode? Siehe API Documentation oder DSL 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"] 
     } 
    } 
    } 
} 
Verwandte Themen