2014-05-13 12 views
39

के अंदर विशिष्ट फ़ाइलों को बहिष्कृत करता है, मैं सोच रहा था कि अलग-अलग फ़ाइलों को बाहर करने के लिए वैसे भी था, जो निर्भरता के अंदर हैं (एक ट्रांजिटिव निर्भरता नहीं), डाउनलोड होने से।ग्रैडल निर्भरता

मैं चींटी + आइवी से ग्रैडल में एक बिल्ड स्विच कर रहा हूं और यह पहले आईवी में किया गया था। मैं पूछता हूं क्योंकि मेरे पास एक एकल निर्भरता है जिसमें आर्टिफैक्टरी में कई संकलित wsdl जार शामिल हैं जिन्हें हम नीचे खींच रहे हैं, लेकिन मैं निर्भरता में सभी जार डाउनलोड नहीं करना चाहता हूं।

आइवी में यह था सेटअप की तरह: इन 6 कलाकृतियों

एक निर्देशिका रेपो/dep.location/उदाहरण/7.3/जार करने के लिए Artifactory प्रकाशित किए जाते हैं।

<publications> 
    <artifact name="foo-1-0" type="jar" /> 
    <artifact name="foo-1-0-async" type="jar" /> 
    <artifact name="foo-1-0-xml" type="jar" /> 
    <artifact name="bar-1-0" type="jar" /> 
    <artifact name="bar-1-0-async" type="jar" /> 
    <artifact name="bar-1-0-xml" type="jar" /> 
</publications> 

इस प्रकार मैं केवल छह कलाकृतियों में से दो को पुनः प्राप्त करता हूं।

<dependency org="dep.location" name="example" rev="7.3" 
      conf="compile,runtime"> 
    <include name="foo-1-0-async"/> 
    <include name="foo-1-0-xml"/> 
</dependency> 

वर्तमान में यदि मैं ग्रैडल में कुछ ऐसा करने का प्रयास करता हूं तो बहिष्कारों को अनदेखा कर दिया जाता है और सभी छह कलाकृतियों को डाउनलोड किया जाता है।

compile (group:"dep.location", name:"example", version:"7.3") 
{ 
    exclude module:'foo-1-0-xml' 
    exclude module:'bar-1-0' 
    exclude module:'bar-1-0-async' 
    exclude module:'bar-1-0-xml' 
} 

मैं ग्रैडल संस्करण 1.8 का उपयोग कर रहा हूं।

+0

जो चीजें आप बाहर करने की कोशिश कर रहे हैं वे कलाकृतियों हैं, न कि मॉड्यूल। ग्रैडल में कलाकृतियों को शामिल/बहिष्कृत करने का एकमात्र समर्थित तरीका जिसे मैं जानता हूं, प्रकार से है, जो यहां सहायता नहीं करेगा। –

+0

यह ग्रेडल में समर्थित नहीं है। लेकिन एक विकल्प बदल गया है कि आप कैसे artifactory प्रकाशित करते हैं। आप कलात्मक में व्यक्तिगत जार फ़ाइलों को प्रकाशित क्यों नहीं करते? – vkg

+0

ठीक है, धन्यवाद। – bhumphrey

उत्तर

3

मुझे नहीं लगता कि ग्रैडल को इसे पूरा करने के लिए कोई भी समर्थन मिला है, लेकिन आप स्वयं को कक्षा के बाहर कलाकृतियों को साफ कर सकते हैं।

this thread Gradle मंचों पर से प्रेरित होकर मैं इस के साथ आया था:

// The artifacts we don't want, dependency as key and artifacts as values 
def unwantedArtifacts = [ 
    "dep.location:example": [ "foo-1-0-xml", "bar-1-0", "bar-1-0-async", "bar-1-0-xml"], 
] 

// Collect the files that should be excluded from the classpath 
def excludedFiles = configurations.compile.resolvedConfiguration.resolvedArtifacts.findAll { 
    def moduleId = it.moduleVersion.id 
    def moduleString = "${moduleId.group}:${moduleId.name}:${moduleId.version}" // Construct the dependecy string 
    // Get the artifacts (if any) we should remove from this dependency and check if this artifact is in there 
    it.name in (unwantedArtifacts.find { key, value -> moduleString.startsWith key }?.value) 
}*.file 

// Remove the files from the classpath 
sourceSets { 
    main { 
     compileClasspath -= files(excludedFiles) 
    } 
    test { 
     compileClasspath -= files(excludedFiles) 
    } 
} 

ध्यान दें कि Gradle शायद अभी भी फ़ाइलों को डाउनलोड और आप के लिए उन्हें कैश करेंगे, लेकिन वे अपने classpath में नहीं होना चाहिए।

+0

ग्रैडल ने समर्थन में बनाया है। यह 'रेज़ोल्यूशन रणनीति' है – smilyface

+0

मुझे यकीन नहीं है कि आप किस कलाकृतियों को हल करने के लिए संकल्प रणनीति का उपयोग कर सकते हैं। – Raniz

1

मुझे यकीन नहीं है कि यह वही है जो आप चाहते हैं, लेकिन चूंकि हम स्प्रिंग बूट और वाइल्डफ्लाई का उपयोग कर रहे हैं, इसलिए हमें वसंत बूट मानक पैकेज से टॉमकैट-स्टार्टर मॉड्यूल को हटाना होगा, और यह आपके जैसा ' Ve किया। हालांकि, हमारे कोड राज्यों:

configurations { 
    compile.exclude module: "spring-boot-starter-tomcat" 
} 

मैं जांच न की हो, तो इसी जार या डाउनलोड बस नहीं classpath पर नहीं है, मैं फिर भी पता है कि यह अब और नहीं किया जाता है।

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