java - ग्रैडल निर्भरता के अंदर विशिष्ट फाइलों को बाहर कर दें




gradle dependencies (2)

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

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

आइवी में यह सेटअप था:

ये 6 कलाकृतियां एक निर्देशिका रेपो / dep.location / example / 7.3 / jar में आर्टिफैक्टरी में प्रकाशित की जाती हैं।

<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 का उपयोग कर रहा हूं।


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

ग्रैडल मंचों पर इस धागे से प्रेरित होकर मैं इसके साथ आया:

// 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 शायद अभी भी फ़ाइलों को डाउनलोड करेगा और उन्हें आपके लिए कैश करेगा, लेकिन वे आपके क्लासपाथ में नहीं होना चाहिए।


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

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

मैंने जांच नहीं की है कि संबंधित जार डाउनलोड नहीं किया गया है या सिर्फ क्लासपाथ पर नहीं है, मुझे पता है कि अब इसका उपयोग नहीं किया जाता है।





artifactory