2013-04-05 4 views
8

से कुछ जार छोड़ कैसे मैं एक युद्ध कल्पना है कि इस तरह दिखता है के साथ एक subproject है। टोमकैट को तैनात करने योग्य एक एकल, वसा युद्ध फ़ाइल बनाता है। समस्या यह है कि, जब टॉमईई और जेबॉस को तैनात किया जाता है, तो मैं संघर्ष में चला जाता हूं (यानी जैवक्स सर्वलेट, जर्सी, आदि के साथ)। तो मैं जार के एक सेट को युद्ध से बाहर करना चाहता हूं। मैंने ग्रैडल युद्ध प्रलेखन को देखा, और ऐसा लगता है कि मुझे इसके लिए बहिष्कार का उपयोग करने की आवश्यकता है। मैं इसे दो अलग अलग तरीकों की कोशिश की, और जार युद्ध से बाहर रखा नहीं कर रहे हैं:Gradle> वेब-INF/lib

war { 

    // copy properties file in classes so that 
    // they may be loaded from classpath 
    from('resources') { 
     include '*.properties' 
     into 'WEB-INF/classes/' 
    } 

    // specify web xml 
    webXml = file('src/main/webapp/WEB-INF/web.xml') 

    // remove jars that conflict with TomEE 
    exclude '**/javax.inject-1.jar' 
    exclude '**/javax.servlet-2.5.0.v201103041518.jar' 
    exclude '**/servlet-api-2.5.jar' 
    exclude '**/validation-api-1.0.0.GA.jar' 

} 

यह एक subproject (karyon-उदाहरण) GitHub पर होस्ट NetFlix/karyon परियोजना के भीतर ही है। subproject में निर्भरता इस तरह दिखेगा:

dependencies { 
    compile 'org.slf4j:slf4j-api:1.7.0' 
    runtime 'org.slf4j:slf4j-simple:1.7.0' 
    compile project(':karyon-extensions') 
    compile project(':karyon-admin-web') 
} 

और मैं क्रम निर्भरता बनाम संकलन, विशेष रूप से अन्य फ़ाइलों और subprojects में तरह संपादन चीजों से बचना चाहते हैं। वास्तव में जार मैं जेटी और नियमित टोमकैट के साथ चलते समय ऊपर से बाहर निकलने की कोशिश कर रहा हूं।

मैं बस निर्माण स्क्रिप्ट को जटिल किए बिना इन जारों को बाहर करना चाहता हूं। मैं क्या खो रहा हूँ?

धन्यवाद

उत्तर

8

जाना स्पष्ट तरीका providedCompile को compile विन्यास से अपने युद्ध में निर्भरता आप नहीं करना चाहते हैं के लिए कदम और runtime से providedRuntime करने के लिए है। प्रदान की गई कॉन्फ़िगरेशन आपके निर्माण में जोड़े जाते हैं जब युद्ध प्लगइन लागू होता है।

उपरोक्त स्निपेट पर एक अन्य नोट: मुझे लगता है कि बहिष्कार काम नहीं करता है क्योंकि आप अपने बहिष्कृत बयान में लक्ष्य पथ का संदर्भ देते हैं, इसके बजाय आपको इसे /servlet-api-2.5.jar द्वारा संदर्भित करना चाहिए।

+2

@rob - 'providedRuntime' शायद जाने के लिए रास्ता है। इसका मतलब है कि पुस्तकालय युद्ध फ़ाइल में नहीं जोड़ा जाएगा। आप 'बहिष्कृत' का उपयोग करने में सक्षम हो सकते हैं लेकिन दुर्भाग्यवश यह अनियंत्रित है और इसे बिल्कुल ठीक करने पर बहुत भ्रमित है। – david

0

आप कर सकते हैं इस तरह से

dependencies { 
    compile fileTree(dir: 'WebContent/WEB-INF/lib', include: ['*.jar']) 
    compile("org.apache.tomcat:tomcat-jni:8.0.37") 
    providedRuntime("org.apache.tomcat:tomcat-jni:8.0.37") 

}