2016-03-11 14 views
6

के बीच ग्रैडल निर्भरता अंतर के बीच ग्राडल निर्भरता अंतर।संकलन, एपीके परियोजना, संकलन परियोजना, प्रदान की गई परियोजना,

compile 
apk project 
compile project 
provided project 
implementation 

मेरे सवालों का

compile, apk project, compile project, provided project यहाँ क्या फ़र्क है कर रहे हैं?

उत्तर

9

यहां चर्चा करने के लिए दो अलग-अलग चीजें हैं: निर्भरता विन्यास और निर्भरता स्रोत। उन्हें स्वचालित रूप से सहित

निर्भरता विन्यास

विन्यास मदद निर्भरता, जो बारी में की खोज और पुस्तकालयों अपनी खुद की परियोजना/पुस्तकालय निर्दिष्ट करने के लिए होने के दर्द को दूर करता की संक्रामिता परिभाषित की आवश्यकता है,। Gradle में विन्यास की यह धारणा बहुत Maven's scopes के समान है:

  1. compile: संकलित करें निर्भरता एक परियोजना के सभी classpaths में उपलब्ध हैं। इसके अलावा, उन निर्भरताओं को निर्भर परियोजनाओं के लिए प्रचारित किया जाता है। एक संकलन-समय निर्भरता आमतौर पर रनटाइम पर आवश्यक होती है।
  2. apk: रनटाइम निर्भरता को परिभाषित करता है। संकलन समय पर इस दायरे के साथ निर्भरता की आवश्यकता नहीं होगी, लेकिन यह निष्पादन के लिए होगा। इसका मतलब यह है कि जब आप अपनी परियोजना वास्तव में चलते हैं तो संकलन करते समय आप समय बचा सकते हैं और फिर भी निर्भरता उपलब्ध हो सकती है। This एक एपीके निर्भरता का उपयोग करने का एक अच्छा उदाहरण है।
  3. provided: इसका मतलब है कि यह निर्भरता रनटाइम पर्यावरण पर उपलब्ध है। नतीजतन, यह गुंजाइश केवल संकलन और परीक्षण कक्षापथ पर उपलब्ध है, और यह संक्रमणीय नहीं है। यह एंड्रॉइड प्रोजेक्ट्स पर समर्थित नहीं है, हालांकि आप here पर चर्चा के अनुसार अपनी कॉन्फ़िगरेशन को परिभाषित करके इसे हल कर सकते हैं।

अधिक विन्यास, इस तरह के testCompile के रूप में है कि आप Android पर सामना कर सकते हैं जो आप एक संकलन समय निर्भरता कि केवल परीक्षण के लिए उपयोग किया जाएगा निर्दिष्ट कर सकते हैं कर रहे हैं, का कहना है कि आप अपने परीक्षण में JUnit उपयोग करना चाहते हैं, तो इस प्रकार आप करना होगा: एक बार जब आप विन्यास आप के लिए उपलब्ध समझने के

testCompile 'junit:junit:4.12' 

निर्भरता स्रोत

, आप एक वास्तविक निर्भरता निर्दिष्ट करने के लिए की जरूरत है। निर्भरता आंतरिक या बाहरी हो सकती है, आप किसी अन्य लाइब्रेरी पर भरोसा कर सकते हैं जिस पर आप काम कर रहे हैं, साथ ही साथ सार्वजनिक रूप से उपलब्ध पुस्तकालयों पर भी भरोसा कर सकते हैं। यहां बताया गया है कि project कीवर्ड आता है, जिससे आप किसी आंतरिक मॉड्यूल या लाइब्रेरी पर निर्भरता निर्दिष्ट कर सकते हैं। compile project के रूप में निर्भरता को परिभाषित करके, आप उस मॉड्यूल या लाइब्रेरी को अपनी प्रोजेक्ट के लिए एक पारस्परिक निर्भरता के रूप में जोड़ रहे हैं।

मान लें कि तीन मॉड्यूल (producer, consumer और shared) के साथ एक परियोजना messages है, परियोजना संरचना के रूप में विचार करेंगे इस प्रकार है:

messages/ 
    build.gradle 
    settings.gradle 
    consumer/ 
     build.gradle 
    producer/ 
     build.gradle 
    shared/ 
     build.gradle 

अब लगता है कि दोनों consumer और producer json प्रारूप में और उस दुकान संदेशों आप उस उद्देश्य के लिए google-gson का उपयोग करना चाहते हैं।मान लें कि दोनों परियोजनाओं में कुछ सामान्य स्रोत कोड हैं जो वे आपके shared मॉड्यूल पर निर्भर करते हैं। consumer के build.gradle उसके बाद निम्न निर्भरता निर्धारित कर सकते हैं:

dependencies { 
    // Internal dependency to project shared 
    compile project (':shared') 

    // External dependency to publicly available library, 
    // through public repositories such as jcenter() or mavencentral() 
    compile 'com.google.code.gson:gson:1.7.2' 
} 

सारांश में, यह है कि आप के रूप में compile, compile project, apk project और निर्भरता की घोषणा करने के लिए सक्षम बनाता है दोनों विन्यास और सूत्रों का संयोजन है अधिक!

+2

ग्रैडल * स्कोप * – RaGe

+1

धन्यवाद @RaGe के बजाय * कॉन्फ़िगरेशन * का उपयोग करता है, आप सही हैं। उचित क्रमिक शब्दावली के साथ अद्यतन उत्तर। – unbekant

संबंधित मुद्दे