2012-11-13 14 views
7

मैं एक निर्भरताMaven: स्थानीय निर्भरता जार करने के लिए

<dependency> 
     <groupId>de.matthiasmann</groupId> 
     <artifactId>twl</artifactId> 
     <version>1.0.0</version> 
     <scope>system</scope> 
     <systemPath>${project.basedir}/lib/TWL.jar</systemPath> 
    </dependency> 

तब मैं निष्पादित mvn assembly:assembly है जोड़ें। सभी मूल निवासी फाइलें और रिमोट मेवेन libs जोड़े गए हैं, लेकिन यह जार नहीं है।

अद्यतन

जब मैं java -jar myjar.jar द्वारा अनुप्रयोग चलाने के लिए कोशिश कर रहा हूँ। यह एक त्रुटि देता है कि उपरोक्त निर्भरता से कोई वर्ग नहीं है (NoClassDefFoundError: de.matthiasmann.twl.ForExample)। मैं इस जार से कक्षाओं को myjar.jar में जोड़ना चाहता हूं (वही वही है जो रिमोट निर्भरताओं के साथ करता है)। मैं ऐसा करने के लिए मैवेन को कैसे कॉन्फ़िगर कर सकता हूं?

+0

@BlessedGeek से जवाब पर –

+0

देखो विस्तृत है और यह भी इस प्रासंगिक तो सवाल पर कृपया ब्लॉग का उल्लेख/2229757/मैवेन-एड-ए-निर्भरता-टू-ए-जार-बाय-रिश्तेदार-पथ/2230464 # 2230464 – maba

+0

यह https://stackoverflow.com/a/45120371/1709793 – craftsmannadeem

उत्तर

7

आप सिस्टमपैथ का उपयोग नहीं कर सकते हैं, जब तक कि आपके जावा ईई सर्वर/कंटेनर में उस जार को कॉन्फ़िगर नहीं किया जाता है।

याद रखें कि मैवेन केवल विकास और संकलन समय है। एक बार युद्ध फ़ाइल बनने के बाद, सभी वांछित जार को वेब-आईएनएफ/lib फ़ोल्डर में रखने के अलावा मेवेन का कोई प्रभाव नहीं पड़ता है।

जब आप सिस्टम स्कोप निर्दिष्ट करते हैं, तो इसका मतलब यह है कि यह सुनिश्चित करना आपकी ज़िम्मेदारी है कि जब युद्ध तैनात किया जाता है तो जार मौजूद होता है। ऐसा करने के लिए आपके पास पहले से ही एक ढांचा है और आप उस जार के साथ अपनी बिल्ड निर्भरता को फिर से तैयार नहीं करना चाहते हैं, लेकिन आपको केवल विकास के दौरान मेवेन को उपलब्ध कराया जाना है।

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

सही तरीका, मेवेन गुरु आपको बताएंगे। अपने स्वयं के मेवेन सर्वर रखना है और उस सर्वर में आपको जो भी कलाकृतियों की आवश्यकता है उसका निर्माण करना है। हालांकि, कभी-कभी यह संभव नहीं है।

इसलिए, ऐसे अवसरों पर, मैं परियोजना स्तर के भंडार का निर्माण करता हूं जो परियोजना के साथ वितरित किया जाता है और संस्करण नियंत्रण में चेक किया जाता है। मैं प्रोजेक्ट लेवल डायरेक्टरी बनाने के लिए mvn install कमांड चलाता हूं, कहें, "प्रोजेक्ट-रेपो"।

http://maven.apache.org/plugins/maven-install-plugin/examples/specific-local-repo.html (परिचितता के कारण, अधिकांश समय, मैं एमवीएन इंस्टॉल चलाने के बजाय हाथ से रेपो बनाते हैं)।

फिर पीओएम में, मैं फ़ाइल निर्दिष्ट करता हूं: // $ {project.basedir}/project-repo रिपॉजिटरीज़ में से एक के रूप में। इसके साथ चेतावनी यह है कि विंडोज़ फ़ाइल सिस्टम पथों का जिक्र करते समय "फ़ाइल: //" के बाद जोड़ी के अलावा अन्य स्लैश बैक-स्लैश होना चाहिए।

<repositories> 
    <repository> 
     <id>my-repo1</id> 
     <name>my custom repo</name> 
     <url>http://ho.ho.ho</url> 
    </repository> 
    <repository> 
     <id>project-repo</id> 
     <name>my project repo</name> 
     <url>file://${project.basedir}\project-repo</url> 
    </repository> 
    </repositories> 
+1

देखें, आगे स्लैश का उपयोग करने में कोई समस्या नहीं है।/'विंडोज़ पर फाइल यूआरएल में। यह बहुत अच्छा काम करता है। +1 बीटीडब्ल्यू। – maba

0

आप इस तरह के एक निर्भरता है, तो सबसे अच्छा समाधान एक repository manager उपयोग करने के लिए और बस भंडार प्रबंधक में है कि निर्भरता डाल दिया और बाद में यह उतना ही आसान निर्भरता का उपयोग पहला है।http://stackoverflow.com/questions:

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