2011-11-02 4 views
7

लॉन्च करते समय ग्रैडल क्लासपाथ रनटाइम को बहिष्कृत करें मेरे पास मिल ग्रैडल वेब एप्लिकेशन प्रोजेक्ट का मूल भाग है और यह ठीक काम करता है लेकिन मैंने देखा कि ग्रैडल का रनटाइम क्लासपाथ जेटी में शामिल किया जा रहा है जिसमें वेब अनुप्रयोगों के साथ संघर्ष करने की क्षमता है ।JettyRun

नीचे ध्यान दें कि ग्रेडल लॉगबैक के थोड़ा पुराने संस्करण का उपयोग कर रहा है और एसएल 4 जे चेतावनी दे रहा है कि इसे कक्षा में कई बाइंडिंग मिलती हैं।

:jettyRun 
SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/C:/dev/java/tools/gradle-1.0-milestone-5/lib/logback-classic-0.9.29.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/C:/Users/kirk.rasmussen/.gradle/caches/artifacts-3/ch.qos.logback/logback-classic/fd9fe39e28f1bd54eee47f04ca040f2b/jars/logback-classic-0.9.30.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 

वहाँ शामिल करने से बच Gradle क्रम classpath बाहर करने के लिए एक तरह से जब jettyRun कार्य चल रहा है? मैं ग्रैडल के नवीनतम 1.0 मील का पत्थर 5 संस्करण का उपयोग कर रहा हूं।

मैं चींटी में जावैक कार्य में 'includeAntRuntime' की तर्ज पर कुछ ढूंढ रहा हूं।

http://ant.apache.org/manual/Tasks/javac.html

includeAntRuntime classpath में चींटी रन-टाइम पुस्तकालयों में शामिल करना है या नहीं; हाँ के लिए डिफ़ॉल्ट, जब तक build.sysclasspath सेट नहीं है। आमतौर पर इसे गलत पर सेट करना सबसे अच्छा होता है, इसलिए स्क्रिप्ट का व्यवहार पर्यावरण के प्रति संवेदनशील नहीं होता है जिसमें यह चल रहा है।

नीचे Stripped build.gradle:

apply plugin: 'groovy' 
apply plugin: 'war' 
apply plugin: 'jetty' 

jettyRun { 
    contextPath = '' 
} 

उत्तर

2

manual for jettyRun कार्य में वर्णित है, यह एक classpath संपत्ति जो डिफ़ॉल्ट project.sourceSets.main.runtimeClasspath करने के लिए सेट कर रहा है है। तुम सिर्फ अपनी पसंद के classpath को यह गुण सेट कर सकते हैं:

configurations{ 
    myJettyRuntime 
} 

dependencies{ 
    myJettyRuntime "group:name:version" 
    ... 
} 

jettyRun{ 
    classpath = configurations.myJettyRuntime 
} 

वैकल्पिक रूप से आप इस classpath से अनावश्यक या परस्पर विरोधी निर्भरता को जोड़ने या घटा सकते क्रमश: -= और += ऑपरेटर्स का उपयोग।

jettyRun{ 
    classpath -= configurations.myExcludedConf 
} 
+0

धन्यवाद यह एक अच्छा विचार है, लेकिन यह बेहतर होगा अगर यह कार्यक्षमता में बनाया गया था, इसलिए मुझे यह निर्धारित करने की ज़रूरत नहीं है कि किन चीजों को बाहर करने की आवश्यकता है। मुझे विश्वास नहीं है कि आप क्या सुझाव देंगे जो काम करेगा क्योंकि दस्तावेज़ीकरण का तात्पर्य है कि यह योजक है। ग्रैडल क्लासपाथ ऐसा लगता है कि यह सवारी के लिए साथ आ सकता है। क्या कोई अच्छा कारण है कि कंटेनर लॉन्च करने के लिए जेटी प्लगइन द्वारा ग्रैडल क्लासपाथ की आवश्यकता क्यों है? –

+0

मैंने 'SourceSet.main.compileClasspath' पर सफलतापूर्वक' - = 'का उपयोग किया है, इसलिए इसे जेटी क्लासपाथ के लिए उसी तरह काम करना चाहिए। मुझे नहीं पता कि क्यों और किस कारण से धीरे-धीरे अपने स्वयं के वर्गपथ शामिल हैं। मैनुअल बताता है कि डिफ़ॉल्ट रूप से क्लासपाथ 'project.sourceSets.main.runtimeClasspath' पर सेट है, जो आपके आवेदन का क्लासपाथ होना चाहिए और क्रमशः नहीं होना चाहिए। यदि समस्या नवीनतम ग्रेडल संस्करण के साथ बनी रहती है तो मैं केवल आपके बग रिपोर्ट को दर्ज करने का सुझाव दे सकता हूं। – rodion

0

आप सिर्फ दो SLF4j बाइंडिंग के बारे में चिंतित हैं, यह प्रतीत होता है कि आप कर सकते ignore the warning in this case। यही वही है जो मैं कर रहा हूं।