2012-11-20 19 views
14

मेरे पास एक ऐसा कार्य है जो एक सरल JavaExec चलाता है।Gradle का उपयोग कर एक ही कार्य में JavaExec कई बार निष्पादित करने के लिए कैसे?

जो मैं काम नहीं कर पा रहा हूं वह जावाटेक्स ऑब्जेक्ट को कई बार चलाने के लिए एक फ़ाइलट्री ऑब्जेक्ट (फाइलें युक्त) को चलाने की क्षमता है, जबकि मैं मुख्य जावाएक्सैक क्लास में एक-एक करके पास करना चाहता हूं। दुर्भाग्यवश संकलक या कोड जनरेशन टूल के रूप में यह एक निर्देशिका को एक तर्क के रूप में स्वीकार नहीं करता है, इसलिए मुझे फ़ाइल प्रति लूप के रूप में फ़ाइल को पास करने की आवश्यकता है। यहाँ मैं क्या है:

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

जाहिर है अलग कार्यों में ऊपर तोड़ने और runing JavaExec n बार एक समाधान होगा, लेकिन इस बिल्ड फ़ाइल बहुत वर्बोज़ और नहीं लचीला (मैं प्रत्येक फ़ाइल के लिए पथ निर्दिष्ट करने के लिए है) बनाता है। – user983022

उत्तर

23

project.javaexec विधि का उपयोग करने के बारे में कैसे? API Documentation या 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"] 
     } 
    } 
    } 
} 
संबंधित मुद्दे