2014-09-23 8 views
33

मैं "exte" का उपयोग कर build.gradle फ़ाइल में एक guava मॉड्यूल को बाहर नहीं कर सकता।ग्रैडल एक मॉड्यूल को बाहर नहीं रखेगा जैसा अनुरोध किया गया है

इस निर्भरता ब्लॉक के साथ

:

dependencies { 
    ... 
    compile(group: 'com.google.api-client', name: 'google-api-client', version: '1.19.0') { 
     exclude(group: 'com.google.guava', module: 'guava-jdk5') // !!! Doesn't work!!! 
     ... 
    } 
... 
} 

मैं निर्भरता वृक्ष के नीचे मिलता है। ध्यान दें कि guava-jdk5 को बाहर नहीं रखा गया है।

+--- com.google.api-client:google-api-client:1.19.0 
| +--- com.google.oauth-client:google-oauth-client:1.19.0 
| | +--- com.google.http-client:google-http-client:1.19.0 
| | | ... 
| | \--- com.google.code.findbugs:jsr305:1.3.9 
| ... 
| \--- com.google.guava:guava-jdk5:13.0 

...

सूचना है कि अंतिम पंक्ति अभी भी अमरूद मॉड्यूल भी शामिल है, यह शामिल नहीं किया गया है। क्यूं कर? इसे कैसे बाहर निकालें?

उत्तर

31

समस्या यह है कि एक और संकलन वस्तु भी प्रथम स्तर निर्भरता है कि एक सकर्मक निर्भरता के रूप में अमरूद-jdk5 था पर निर्भर था था, इसलिए इस अन्य वस्तु अवांछित मॉड्यूल में लाने गया था।

मैं अंत में

./gradlew -q :app:dependencyInsight --dependency guava --configuration compile 

का उपयोग कर यह देखने में सक्षम था और

configurations { 
    compile.exclude module: 'guava-jdk5' 
} 
+1

हम @Ajay आप ऐसा नहीं कर सकते Gradle में पैकेज – Ajay

+0

से विशेष वर्ग कैसे रोक सकते हैं। आप केवल उन निर्भरताओं या पारगमन निर्भरताओं से विशिष्ट वर्गों या संकुलों तक नहीं, केवल पारस्परिक निर्भरताओं को बाहर कर सकते हैं। – sversch

18

प्रश्न के लेखक द्वारा एक उत्तर का उपयोग कर मेरी मदद नहीं लगा कि यह बाहर कर सकते हैं, क्योंकि यह बहुत संकीर्ण/ठोस है।

  1. चेक वर्तमान में मान्यता प्राप्त निर्भरता "टर्मिनल" में इस आदेश का उपयोग: यह एक संशोधित दृष्टिकोण है, जो किसी भी मॉड्यूल के बहिष्कार के लिए काम करता है

    gradlew app:dependencies 
    

आदेश से जारी किया जाता है यहां आपके प्रोजेक्ट की रूट और "ऐप" को आपके एप्लिकेशन के "मॉड्यूल" के नाम से बदला जाना चाहिए। लिनक्स पर उपयोग ../gradle:

आप भी अपने आवेदन के फ़ोल्डर के अंदर सीडी और इस लांच हो सकता है:

..\gradlew -q dependencies 

नोट।

आप देखेंगे कि कई कॉन्फ़िगरेशन मौजूद हैं, केवल "संकलित" नहीं (उदा। "_debugCompile" आदि)। प्रत्येक "विन्यास" की अपनी निर्भरता है! यही कारण है कि उदा। "संकलन" कॉन्फ़िगरेशन में कुछ को छोड़कर पर्याप्त नहीं हो सकता है।

  1. अब सभी "विन्यास" इस तरह से करने के लिए बहिष्कार लागू होते हैं: (बाहर करने के लिए मॉड्यूल की अपनी सूची के साथ अपने आवेदन की ("मॉड्यूल") gradle.build फ़ाइल को यह ब्लॉक जोड़ें, जाहिर है :-)):

    configurations { 
        all { 
         exclude module: 'httpclient' 
         exclude module: 'httpcore' 
        } 
    } 
    
  2. चरण दोहराएं 1. और 2. जब तक आप किसी भी विन्यास की निर्भरता की एक सूची में मॉड्यूल है, जो आप छोड़ना चाहते हैं नहीं दिख रहा है,।

टिप: यहाँ, अंदर "सभी" ब्लॉक, आप करने का फैसला हो सकता है:

transitive = false 

और तुम सब सकर्मक निर्भरता से छुटकारा मिल जाएगा।

+0

आप भी 'समूह उपयोग नहीं करना चाहिए: 'com.some.group''? –

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