2009-12-18 21 views
8

मुझे लगता है कि आप में से ज्यादातर जानते होंगे, प्रोग्रामर अक्सर अन्य सॉफ़्टवेयर से कोड का पुन: उपयोग करते हैं। मुझे लगता है, ज्यादातर समय यह एक अच्छा विचार है। लेकिन अगर आप किसी अन्य प्रोजेक्ट से कोड का उपयोग करते हैं तो आपका प्रोग्राम अन्य प्रोजेक्ट पर निर्भर करता है।जावा परियोजनाओं के बीच निर्भरताओं को हल करने का सबसे अच्छा तरीका क्या है?

मैं अपने वर्तमान मामले में तीन जावा परियोजनाएं ए, बी और सी प्राप्त करता हूं। अब ए बी का उपयोग करता है और बी का उपयोग करता है। मैं ग्रहण आईडीई का उपयोग कर रहा हूं और बी के निर्माण के लिए ए और सी के बिल्डपैथ में बी जोड़ा गया। अब एक कंपाइलर त्रुटि है कि ए सी से कुछ हल नहीं कर सकता है। इसलिए मुझे बी

के बिल्डपैथ में सी जोड़ना है, तो अपने प्रोग्राम को स्वतंत्र के रूप में रखते हुए निर्भरताओं को हल करने का सबसे अच्छा तरीका क्या है अन्य परियोजनाओं से संभव है?

मैं सामान्य रूप से और मेरी वर्तमान स्थिति के संदर्भ में जानना चाहता हूं। क्या ऐसा करने के बेहतर तरीके हैं? अर्थात। लॉन्च/डीबग कॉन्फ़िगरेशन व्यू में क्लासपाथ सेटिंग्स हैं, लेकिन मुझे लगता है कि वे समय संकलित करने में मदद नहीं करेंगे।

अग्रिम धन्यवाद।

+1

सुनिश्चित नहीं हैं कि क्यों यह नीचे मतदान किया था, और उस पर टिप्पणी के बिना। यह एक वैध सवाल है, अगर कुछ हद तक नौसिखिया-आश के बाईं ओर है। बुरा रूप का। –

उत्तर

7

यह मेवेन द्वारा निर्धारित समस्या सेट के हिस्से की तरह लगता है। मेवेन और ग्रहण का उपयोग करना, अर्थात् m2eclipse, आप परियोजनाओं को अन्य परियोजनाओं का उपयोग कर सकते हैं और सभी निर्भरता संकल्प आपके लिए संभाला जाता है।

+1

इसके अलावा, यदि आप इंटेलिजे आईडीईए का उपयोग करते हैं, तो अंतर्निहित मेवेन एकीकरण शानदार है। – danben

+2

हम एक बड़ी परियोजना के लिए मेवेन का उपयोग करते हैं। एक बार यह सेटअप और सही तरीके से काम करने के बाद मुझे यह पसंद है, हालांकि दस्तावेज कई जगहों पर कमजोर है और इसमें एक सीधी सीखने की वक्र हो सकती है। उस रास्ते को शुरू करने से पहले उन मुद्दों से अवगत रहें। –

+0

यदि आप मेवेन पर और जानना चाहते हैं, तो यहां सोनाटाइप से एक मुफ्त ईबुक है: http://www.sonatype.com/Support/Books – Kjellski

2

यह मुझे लगता है जैसे आप आइवी या मेवेन जैसे निर्भरता प्रबंधन उपकरण को शामिल किए बिना जो कर रहे हैं, वह आपको "पारस्परिक निर्भरता प्रबंधन" की क्षमता प्रदान करता है। इन उपकरणों में से किसी एक के साथ आप बस निर्दिष्ट कर सकते हैं कि ए बी पर निर्भर करता है और बी सी पर निर्भर करता है और वे स्वचालित रूप से जानते होंगे कि ए को भी सी की आवश्यकता होगी।

मैवेन के फायदे (यह वही है जो मुझे अनुभव है) भी खेल में आता है जब आपकी परियोजनाओं को तैनाती के लिए पैकेज करने का समय होता है क्योंकि यह उन सभी निर्भरताओं को आसानी से इकट्ठा कर सकता है (सभी तरह से पदानुक्रम के नीचे) और उन्हें रखें एक साथ वितरण फ़ोल्डर या एक वसा जार में जिसमें आपकी सभी निर्भरताएं शामिल हैं। मेवेन जैसे टूल में जाने के लिए कुछ पढ़ने और सेट-अप समय लगता है, लेकिन यह आपकी निर्भरताओं को प्रबंधित करने का कार्य बहुत आसान बनाता है, खासकर जब वे बढ़ते हैं।

0

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

वास्तव में इन ढांचे का उपयोग करने के लिए, आपको अपनी वर्तमान निर्माण प्रक्रिया को बदलना होगा। मेवेन को शायद आइवी की तुलना में अधिक प्रतिबद्धता की आवश्यकता होती है, लेकिन न तो मामूली है, और इसे समझने के तरीके को समझने में कुछ समय लगता है। उस ने कहा, आपकी निर्भरता को परिभाषित और स्पष्ट रूप से प्रबंधित करना बहुत उपयोगी है।

1

हम मेवेन का उपयोग करते हैं और यह हमारी परियोजनाओं के लिए आवश्यक है। यह सीखने के लिए एक अच्छा समय है - 3 से अधिक परियोजनाओं पर निर्भरता भयभीत हो सकती है। मेवेन संस्करणों से संबंधित है ताकि यदि किसी भी कारण से, आपको Foo.1.2.3 पर निर्भर होना है तो मैवेन यह सुनिश्चित करेगा कि आपको गलत संस्करण नहीं मिलेगा।

हालांकि यह मामूली नहीं है। यदि आप Netbeans का उपयोग करते हैं तो यह ग्रहण से बेहतर में बनाया गया है और आपको सीखने में मदद कर सकता है। (परियोजनाएं दोनों प्रणालियों के बीच काफी स्विच करने योग्य हैं)।

मैवेन अपनी पीओएम (pom.xml) फ़ाइल में लाइसेंस की जानकारी, योगदानकर्ता, तर्क इत्यादि सहित कई अवधारणाओं का समर्थन करता है ताकि आप केवल निर्भरता प्रबंधन से बहुत अधिक प्राप्त कर सकें। और यह परियोजनाओं के मॉड्यूलरिसेशन का समर्थन करता है।

सीखने की अवस्था को न छोड़ें - आपको यह जानने की जरूरत है कि यह कैसे काम करता है।लेकिन आपको पिछले SO प्रश्न भी मिलेंगे जो

1

अन्य लोगों ने कई अच्छे टूल का उल्लेख किया है, मैवेन शायद सबसे आम है। आइवी एक और है जो केवल निर्भरता प्रबंधन पर अधिक लक्षित है। मैं व्यक्तिगत रूप से ग्रेडल का उपयोग करता हूं जिसमें परिचित ग्रोवी रैपर के नीचे उन सभी सुविधाओं में से कुछ सर्वश्रेष्ठ है ... जो अभी भी विकसित हो रहा है और पूरी तरह से प्रलेखित है। ;)

इस बात से अवगत होना एक बात यह है कि ये उपकरण कैसे ट्रांजिटिव निर्भरताओं को संभालते हैं। आपके उदाहरण में, सी ए की एक पारस्परिक निर्भरता है क्योंकि ए बी पर निर्भर करता है जो सी पर निर्भर करता है। इनमें से कुछ निर्माण उपकरण इस प्रकार की निर्भरता को अलग-अलग संभालेंगे और जब आप कम से कम इसकी अपेक्षा करते हैं तो यह आपको आश्चर्यचकित कर सकता है।

उदाहरण के लिए, यदि ए वास्तव में सी से कोड को संदर्भित करता है, यानी: इसमें सी पर संकलन-समय निर्भरता है, तो आपका ए-> बी-> सी सेटअप मैवेन जैसे कुछ काम करेगा। दूसरी तरफ, ग्रेडल आपको यह भी घोषणा करेगा कि ए सी पर निर्भर करता है ... क्योंकि यह करता है। रनटाइम निर्भरता किसी भी तरह से पूरी तरह हल हो जाती है।

आश्चर्य तब आता है जब आप महीनों के लिए कुछ भी शामिल कर रहे हैं और आपके कुछ कोड ने सी के पहलुओं पर भरोसा किया है और आप तय करते हैं कि अब आपको बी निर्भरता की आवश्यकता नहीं है। अचानक आपका कोड तब तक नहीं बनाएगा जब तक आपको पता न लगे कि आपको ए-> सी निर्भरता निर्दिष्ट की आवश्यकता है। इस उदाहरण में, यह खोजना बहुत छोटा है लेकिन कभी-कभी यह नहीं होता है।

और यदि इस तरह की बात करें तो आपका सिर थोड़ा तैरता है और आप अपनी परियोजना पर अधिक जटिल होने की योजना नहीं बनाते हैं ... तो आप शायद थोड़ी देर के लिए जो कर रहे हैं उसके साथ रहें। जैसा कि अन्य ने उल्लेख किया है, यह आपकी सहायता करने वाले टूल के बिना ऐसा करने का सही तरीका है।

1

अपनी निर्भरताओं को प्रबंधित करने के लिए मेवेन का उपयोग करें और फिर निर्भरता देखने के लिए निर्भरता प्लगइन का उपयोग करें।

आप

mvn निर्भरता चला सकते हैं: विश्लेषण

या

mvn निर्भरता: पेड़ -Dverbose = सच

यह आप एक बहुत मदद मिलेगी।

1

इसमें कोई संदेह नहीं है कि आपको एक निर्भरता प्रबंधन उपकरण का उपयोग करना चाहिए क्योंकि लोगों ने नोट किया है ... मैन्युअल रूप से, B_C.jar में बी और सी संग्रहित करें। परीक्षण करें कि सी पर बी की निर्भरता जार के भीतर हल हो गई है।

फिर classpath में B_C.jar जोड़ने ...

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

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