Allprojects और subprojects में क्या अंतर है


124

मल्टी-प्रोजेक्ट ग्रेडेल बिल्ड पर, क्या कोई मुझे बता सकता है कि "ऑलप्रोजेक्ट्स" सेक्शन और "सबप्रोजेक्ट्स" के बीच अंतर क्या है? बस जनक निर्देशिका? क्या कोई दोनों का उपयोग करता है? यदि हां, तो क्या आपके पास सामान्य नियम हैं जो निर्धारित करते हैं कि आमतौर पर प्रत्येक में क्या डाला जाता है?

संबंधित प्रश्न: दो वाक्यविन्यासों के बीच अंतर क्या है (वास्तव में allprojects और उपप्रोजेक्ट के लिए):

subprojects {  ...
}

तथा

configure(subprojects) { ...
}

तुम एक दूसरे पर कब करोगे?

जवाबों:


119

मल्टी-प्रोजेक्ट ग्रेडल बिल्ड में, आपके पास एक रूटप्रोजेक्ट और सबप्रोजेक्ट है। दोनों का संयोजन allprojects है। रूटप्रोजेक्ट वह जगह है जहां से निर्माण शुरू हो रहा है। एक सामान्य पैटर्न एक रूटप्रोजेक्ट है जिसका कोई कोड नहीं है और उपप्रोजेक्ट जावा प्रोजेक्ट हैं। जिस स्थिति में, आप केवल सबप्रोजेक्ट में जावा प्लगइन लागू करते हैं:

subprojects {
    apply plugin: 'java'
} 

यह एक मावेन एग्रीगेट पोम प्रोजेक्ट के बराबर होगा जो सिर्फ उप-मॉड्यूल बनाता है।

दो वाक्यविन्यासों के बारे में, वे ठीक यही काम करते हैं। पहले वाला सिर्फ बेहतर दिखता है।


मैं आपके उत्तर को समझने की कोशिश कर रहा हूँ, और क्यों कोई "rootProject का कोई कोड नहीं है" चाहेगा?
मरिअन पाडज़िओच

6
इसमें कोड हो सकता है लेकिन ज्यादातर समय यह एक रूट परियोजना के तहत सभी उप परियोजनाओं के संयोजन के लिए होता है।
मल्लाउद्दीन

44

रयान के जवाब में जोड़ना, configureविधि महत्वपूर्ण हो जाती है जब आप वस्तुओं के कस्टम सबसेट को कॉन्फ़िगर करना चाहते हैं। उदाहरण के लिए configure([project(":foo"), project(":bar")]) { ... }या configure(tasks.matching { it.name.contains("foo") }) { ... }

कब उपयोग करें allprojectsबनाम subprojectsपरिस्थितियों पर निर्भर करता है। अक्सर आप दोनों का उपयोग करेंगे। उदाहरण के लिए, कोड से संबंधित प्लग इन जैसे जावा प्लगइन आमतौर पर लागू होते हैं subprojects, क्योंकि कई बिल्ड में रूट प्रोजेक्ट में कोई कोड नहीं होता है। दूसरी ओर, एक्लिप्स और आईडिया प्लगइन्स आमतौर पर लागू होते हैं allprojects। यदि संदेह है, तो उदाहरणों और अन्य बिल्ड और / या प्रयोग को देखें। सामान्य लक्ष्य अप्रासंगिक विन्यास से बचना है। उस अर्थ में, जब तक यह अपेक्षित परिणाम देता है, तब तक subprojectsबेहतर है allprojects


क्या होगा अगर मेरी कुछ उप परियोजनाएं प्रोटोकॉल बफ़र्स पर निर्भर करती हैं? मैं सभी में प्रोटो-ग्रेड-प्लगइन लागू करना चाहिए? या उप या केवल उप में उन कुछ परियोजनाओं के लिए?
user1870400
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.