2012-12-13 23 views
9

में विशिष्ट प्रोजेक्ट्स के लिए कॉन्फ़िगरेशन लागू करें मेरे पास एक ग्रेबल प्रोजेक्ट है जिसमें जावा एप्लिकेशन के साथ-साथ एंड्रॉइड एप्लिकेशन भी हैं।ग्रेडल बिल्ड स्क्रिप्ट

root/ 
    build.gradle 
    settings.gradle 
    java1/ 
    java2/ 
    android1/ 
    android2/ 
    java3/ 

आदि

अपने निर्माण स्क्रिप्ट की संरचना के लिए सबसे अच्छा तरीका क्या है? मैं कुल स्नातक नौसिखिया हूं और परियोजना को मेवेन से धीरे-धीरे माइग्रेट कर रहा हूं।

मैं प्लगइन्स और अन्य विशिष्ट बातें लागू करने के लिए

configure(subprojects) {} 

के बजाय कुछ करना चाहता था।

जैसे

configure(java1, java2, java3) { // java specifics } 
configure(android1, android2) { // android specifics } 

मैं शायद गलत तरीके से इस आ रहा हूँ।

अधिक स्पष्ट रूप से मुझे जावा परियोजनाओं और एंड्रॉइड परियोजनाओं के लिए एंड्रॉइड प्लगइन के लिए प्लगइन जावा लागू करने की आवश्यकता है।

उत्तर

4

वहाँ कई तरीके, आप क्या चाहते हैं पर निर्भर करता है ... कुछ उदाहरण:

// Configures just project java1 
project(":java1") { ... } 

// Configures projects java1 and java2 
["java1","java2"].each { name -> 
    project(":$name") { ... } 
} 

आप सामान्य ग्रूवी का उपयोग लगता है/सभी परियोजनाओं से अधिक पुनरावृति कर सकते हैं।

+0

एक ग्रोवी नौसिखिया की तरह भी। मैं आपके दृष्टिकोण को बेहतर तरीके से पसंद करता हूं क्योंकि यह अधिक स्केलेबल है। धन्यवाद – predhme

+0

वास्तव में परीक्षण के बाद, यह काम नहीं करेगा। स्क्रिप्ट इस तथ्य के बारे में शिकायत कर रही है कि इसे रूट नहीं मिल रहा है (इस मामले में निर्देशिका का नाम जो परियोजना की जड़ है)। पथ 'रूट' के साथ परियोजना रूट प्रोजेक्ट 'रूट' में नहीं मिल सका। मैं बस कॉपी और चिपकाया // कॉन्फ़िगर करती परियोजनाओं java1 और java2 [ "java1", "java2"] प्रत्येक {नाम -> परियोजना (": $ नाम") {...} }। त्रुटि रेखा प्रोजेक्ट को इंगित करती है (": $ name") – predhme

+0

तथ्य के बाद, मैं आगे बढ़ गया और धीरे-धीरे/ग्रोवी एपिस को देखा और सबप्रोजेक्ट्स के सबसेट को वापस करने के लिए एक विधि लिखने में सक्षम था जिसे मैं कॉन्फ़िगरेशन में पास कर सकता हूं() तरीका। यह काम करता है। धन्यवाद – predhme

11
configure(subprojects.findAll {it.name == "java1" && it.name == "java2"}) { 

Under the filtering section in the guide

आशा इस किसी और बाहर में मदद करता है।

+1

इस होना नहीं करना चाहिए '' || नहीं '' &&? – smac89

3

एक अन्य विकल्प:

configure([ project(':sub1'), project(':sub2'), ... ]) { 
    ... 
} 
0

सबसे छोटा और सबसे आसान विकल्प:

configure(subprojects.findAll()) { 
    if (it.name.equals('MY_PROJECT')) { 
    ... 
    } else { 
    ... 
    } 
} 
0

एक और दृष्टिकोण ...

settings.gradle आप इस तरह अपनी परियोजनाओं को परिभाषित करते हैं:

gradle.ext.javaProjects=[] 
gradle.ext.androidProjects=[] 

javaProject('java1') 
javaProject('java2') 
javaProject('java3') 
androidProject('android1') 
androidProject('android2') 

def javaProject(String name) { 
    gradle.ext.javaProjects.add(name) 
    include ":$name" 
} 

def androidProject(String name) { 
    gradle.ext.androidProjects.add(name) 
    include ":$name" 
} 

अब आप अपनी जड़ build.gradle में उन लोगों के देख सकते हैं:

def javaProjects = subprojects.findAll {gradle.ext.javaProjects.contains(it.name)}; 
def androidProjects = subprojects.findAll {gradle.ext.javaProjects.contains(it.name)}; 

configure(javaProjects) { 
... 
} 
configure(androidProjects) { 
... 
} 

शायद overkill thats ... लेकिन मैं आम तौर पर किसी भी तरह अपना settings.gradle में परियोजना परिभाषा विधि है। जैसे यदि आप एक जावा फ़ोल्डर के अंतर्गत सभी जावा परियोजनाओं रखना चाहते हैं तो आप इस तरह बातें निर्धारित कर सकते हैं:

def javaProject(String name) { 
    gradle.ext.javaProjects.add(name) 
    include ":$name" 
    project(":$name").projectDir = file('java/'+ name) 
} 
संबंधित मुद्दे