2015-06-09 18 views
5

में 'प्रदान की गई' निर्भरता मेरे पास build.gradle है और कुछ निर्भरता provided के रूप में घोषित की गई हैं लेकिन documentation में मुझे इस निर्भरता के दायरे को नहीं दिखाई देता है।ग्रैडल

dependencies { 
    compile("org.springframework.boot:spring-boot-starter-web:1.2.4.RELEASE") 
    .... 

    provided 'backport-util-concurrent:backport-util-concurrent:3.1' 
    provided 'org.javolution:javolution:[email protected] 
    .... 
} 

क्या यह एक प्लगइन द्वारा प्रदान किया जाता है? यदि ऐसा है तो मुझे पता चला कि यह किस प्लगइन से संबंधित है?

ग्रैडल में provided और runtime निर्भरता क्षेत्र के बीच क्या अंतर है?

+1

क्या आपके पास 'प्रदान किया गया नाम 'नाम है? – Opal

+0

मुझे लगता है कि मुझे समझ में नहीं आता कि आप किस प्रकार की कॉन्फ़िगरेशन का मतलब है। –

+0

मेरा मतलब है 'कॉन्फ़िगरेशन' ब्लॉक में 'प्रदत्त' नामक एक प्रविष्टि। क्या आप पूरी 'build.gradle' स्क्रिप्ट पेस्ट कर सकते हैं? – Opal

उत्तर

16

provided गुंजाइश क्या है?

मान लीजिए कि jar आपके कोड को संकलित करने के लिए आवश्यक है, लेकिन जार उत्पादन पर्यावरण पुस्तकालय संग्रह में मौजूद है। फिर आपको अपने प्रोजेक्ट अभिलेखागार के साथ जार पैकेज करने की आवश्यकता नहीं है। इस आवश्यकता का समर्थन करने के लिए, मेवेन का नाम provided है। यदि आप provided के रूप में कोई जार निर्भरता घोषित करते हैं, तो यह जार संकलन के दौरान आपके क्लासपाथ में उपस्थित होगा लेकिन आपके प्रोजेक्ट संग्रह के साथ पैक नहीं किया जाएगा।

provided गुंजाइश बहुत उपयोगी है, खासकर वेब अनुप्रयोगों में। उदाहरण के लिए, servlet-api.jar को अपनी प्रोजेक्ट को संकलित करने के लिए अपने क्लासपाथ में उपस्थित होने की आवश्यकता है, लेकिन आपको servlet-api.jar फ़ाइल को अपने war के साथ पैकेज करने की आवश्यकता नहीं है। provided के साथ कोई भी इस आवश्यकता को प्राप्त कर सकता है।

provided नामक ग्रैडल java प्लगइन में कोई स्कोप परिभाषित नहीं है। war या android प्लगइन में भी नहीं। यदि आप अपनी परियोजना में provided स्कोप का उपयोग करना चाहते हैं, तो आपको इसे अपने build.gradle फ़ाइल में परिभाषित करना होगा।

configurations { 
    provided 
} 

sourceSets { 
    main { compileClasspath += configurations.provided } 
} 

अब, अपने दूसरे प्रश्न:

Gradle में उपलब्ध कराई गई और रनटाइम निर्भरता दायरे में क्या अंतर है के बाद Gradle में provided गुंजाइश घोषित करने के लिए कोड का टुकड़ा है?

इस प्रश्न का उत्तर देने के लिए पहले मैं compile निर्भरता को परिभाषित कर दूंगा। compile निर्भरता निर्भरताएं हैं, जो आपके कोड को संकलित करने के लिए आवश्यक हैं। अब कल्पना करें कि यदि आपका कोड X नामक लाइब्रेरी का उपयोग करता है तो आपको X को अपनी संकलन-समय निर्भरता के रूप में घोषित करना होगा। यह भी कल्पना करें कि X आंतरिक रूप से अन्य लाइब्रेरी Y का उपयोग करता है, और आपने Y को अपने रनटाइम निर्भरता के रूप में घोषित किया है।

संकलन के दौरान, ग्रैडल आपके क्लासपाथ में X जोड़ देगा लेकिन Y नहीं जोड़ देगा। चूंकि संकलन के लिए Y आवश्यक नहीं है। लेकिन यह X और Y दोनों को आपके प्रोजेक्ट आर्काइव के साथ पैकेज करेगा क्योंकि X और Y दोनों उत्पादन वातावरण में आपके प्रोजेक्ट आर्काइव को चलाने के लिए आवश्यक हैं। आम तौर पर, उत्पादन पर्यावरण में आवश्यक सभी निर्भरताओं को runtime निर्भरता के रूप में जाना जाता है।

Gradle आधिकारिक documentation में, यह कहना है कि runtime निर्भरता रहे हैं "कार्यावधि में उत्पादन वर्गों के लिए आवश्यक निर्भरता। डिफ़ॉल्ट रूप से, यह भी संकलन समय निर्भरता भी शामिल है।"।

अब, अगर आप इसे पढ़ लिया है अब तक, तो आप पहले से ही पता है कि provided एक compile निर्भरता है कि हम runtime निर्भरता (मूल रूप से में उपस्थित होने के लिए नहीं करना चाहते है, हम इसके साथ पैकेज नहीं करना चाहते परियोजना संग्रह)।

provided और runtime स्कोप का एक उदाहरण है। यहां, compile प्रोजेक्ट को संकलित करने के लिए आवश्यक निर्भरताओं को संदर्भित करता है और non-compile प्रोजेक्ट संकलन के लिए आवश्यक निर्भरताओं को संदर्भित करता है।