Gradle 1.0 उपयोग करने के लिए नहीं मील का पत्थर 8.Gradle - एक विन्यास के लिए एक निर्भरता बाहर करते हैं, लेकिन एक विरासत विन्यास
मेरे परियोजना slf4j + Logback प्रवेश के लिए उपयोग करता है, तो मैं प्रदूषण से log4j पर किसी भी सकर्मक deps रोकना चाहते हैं, मेरी classpath। इस प्रकार, मैं एक वैश्विक बहिष्कार, इसलिए की तरह कहा:
configurations {
all*.exclude group: "log4j", module: "log4j"
}
हालांकि, मैं एक परीक्षण पुस्तकालय (hadoop-minicluster
) जो log4j पर एक क्रम निर्भरता है का उपयोग कर रहा है, इसलिए मैं अब अपने परीक्षण क्रम के लिए एक log4j निर्भरता की अनुमति देनी होगी । मैं log4j पर सीधा निर्भरता को जोड़ने की कोशिश की:
testRuntime group: "log4j", name: "log4j", version: "1.2.15"
और संपादन मेरी बहिष्कार कोड (एक हैक का एक सा):
configurations.findAll {!it.name.endsWith('testRuntime')}.each { conf ->
conf.exclude group: "log4j", module: "log4j"
}
लेकिन यह काम नहीं करता। TestCompile conf को बहिष्करण जोड़ना स्वचालित रूप से सभी विरासत कॉन्फ़िगरेशन में भी जोड़ता है, जिसमें testRuntime भी शामिल है। और ऐसा लगता है कि यह बहिष्कार मैंने जो स्पष्ट निर्भरता भी जोड़ा है, उसे ओवरराइड करता है।
ऐसा प्रतीत होता है कि यह ग्रैडल के लिए व्यवहार की अपेक्षा की जाती है। the docs से:
आप एक एक विशेष विन्यास के लिए बाहर निकालने के निर्धारित करते हैं बाहर रखा गया सकर्मक निर्भरता जब इस विन्यास या किसी इनहेरिट विन्यास को हल करने के लिए सभी निर्भरता फ़िल्टर कर दिया जाएगा।
तो क्या मैं ऐसा करना चाहता हूं जो मैं प्राप्त करना चाहता हूं?
विचार:
- एक नया conf
myTestRuntime
कि testCompile से विस्तार नहीं करता है बनाएँ, और का उपयोग करें कि अपने परीक्षण classpath के लिए।- लेकिन फिर मुझे testCompile और myTestRuntime दोनों के लिए सभी निर्भरताओं को डुप्लिकेट करना होगा।
- कॉन्फ़िगरेशन-स्तर बहिष्करण निकालें। TestRuntime के अलावा सभी confs के लिए, निर्भरताओं के माध्यम से पाश और log4j मैन्युअल रूप से हटा दें (या log4j पर एक डिप्टी-स्तर बहिष्करण जोड़ें)।
- क्या यह भी संभव है? कॉन्फ़िगरेशन। सभी निर्भरता केवल पढ़ने के लिए है।
क्या आप अपना वैश्विक बहिष्कार नहीं कर सकते थे और फिर 'log4j-over-slf4j.jar'' जोड़ सकते हैं? http://www.slf4j.org/legacy.html – Snekse
@ स्नेक्से जो भी काम करेगा। अच्छा विचार –