मुझे लगता है कि आप एक बुनियादी गलतफहमी है कि नहीं मिलता है।
Maven: Maven pom.xml के माध्यम से परियोजना निर्भरता के सभी निर्धारित करता है और स्वचालित रूप से सकर्मक निर्भरता को हल करता है (यह मानते हुए कि पोम फ़ाइलों और कलाकृतियों के सभी खजाने कि आप कॉन्फ़िगर कर दिया है में मौजूद हैं और सही ढंग से उनके निर्भरता घोषित)।
टाइको: समस्या ग्रहण पहले से ही उत्पाद फ़ाइलें, feature.xml फ़ाइलों के आधार पर अपने स्वयं के परियोजना मॉडल है कि है, और प्लग-इन MANIFEST.MF फ़ाइलें। टाइको ग्रहण के लिए मेवेन मशीनरी का लाभ उठाता है, लेकिन विचार यह है कि pom.xml फ़ाइलें केवल मेवेन प्लग-इन को कॉन्फ़िगर करती हैं और पैकेजिंग प्रकार घोषित करती हैं। यह मेवेन के लिए एक प्रवेश बिंदु प्रदान करता है, लेकिन फिर Tycho खत्म हो जाता है। जबकि मेवेन आम तौर पर पोम में सूचना से निर्भरता श्रृंखला का निर्माण करेगा।एक्सएमएल फाइलें, टाइको उत्पाद, फीचर, और MANIFEST.MF फ़ाइलों में जानकारी से निर्भरता परिवर्तन का निर्माण कर रही है। आप pom.xml फ़ाइलों में कोई निर्भरता नहीं डालते हैं। Tycho स्थानीय मॉड्यूल या लक्ष्य मंच में नहीं मिलते आश्रित प्लग-इन खोजने के लिए ग्रहण पी 2 भंडार (सामान्य मेवेन भंडारों के बजाय) का भी उपयोग करता है।
यह वास्तव में कई ग्रहण डेवलपर्स के लिए एक लाभ है क्योंकि वे पहले से ही अपने ग्रहण प्लग-इन, विशेषताओं और उत्पादों में सब कुछ ठीक से सेट कर चुके हैं। वे pom.xml में सभी निर्भरताओं को दोहराना नहीं चाहते हैं। ग्रहण प्लग-इन में
का उपयोग पुस्तकालय: ग्रहण में, आप एक पुस्तकालय है कि पहले से ही ग्रहण प्लग-इन के रूप में पैक नहीं है का उपयोग करना चाहते हैं, तो आप कुछ ही विकल्प हैं। आपके प्लग-इन में एक libs फ़ोल्डर में JAR का एक सेट शामिल हो सकता है और फिर प्लग-इन और रनटाइम क्लासपाथ में libs फ़ोल्डर शामिल करें (build.properties फ़ाइल देखें)। एक अन्य विकल्प है कि आप अपना "लाइब्रेरी प्लग-इन" बनाएं जो एक जेएआर लाइब्रेरी को एक्लिप्स प्लग-इन के रूप में दोबारा तैयार करे। https://wiki.eclipse.org/FAQ_What_is_the_classpath_of_a_plug-in%3F भी देखें। यही वह जवाब है जिसे आप ऊपर प्राप्त कर रहे हैं।
समस्या यह है कि यदि आप कई जेएआरएस के साथ एक जटिल पुस्तकालय शामिल करने की कोशिश कर रहे हैं जो सामान्य रूप से वितरित किया जाता है और मैवेन के माध्यम से एक मानक जावा प्रोजेक्ट में शामिल किया जाता है। हमने अपनी परियोजना में जर्सी जेएक्स-आरएस कार्यान्वयन के साथ इस समस्या को मारा। कोई पी 2 भंडार नहीं है जिसमें पुस्तकालयों के सभी टुकड़े सही निर्भरता जानकारी के साथ प्लग-इन के रूप में शामिल हैं।
आसान समाधान: यदि आप एक आम पुस्तकालय की जरूरत है, यह देखने के लिए पुस्तकालयों पहले से ही ग्रहण प्लग इन, http://www.eclipse.org/orbit/ के रूप में पैक किया गया है ऑर्बिट परियोजना की जाँच पहले। उस स्थिति में, आप उन्हें डाउनलोड कर सकते हैं और उन्हें अपने लक्षित प्लेटफ़ॉर्म में शामिल कर सकते हैं, या आप उन्हें अपने पी 2 भंडार से समय (Tycho) निर्माण समय पर गतिशील रूप से खींच सकते हैं। आपके प्लग-इन में केवल उन प्लग-इन को निर्भरता के रूप में शामिल किया जाएगा (उनकी MANIFEST.MF फ़ाइलों में)।
वर्कअराउंड/समाधान: हमारे मामले में, जर्सी जेएक्स-आरएस ग्रहण प्लग-इन के रूप में उपलब्ध नहीं था, और इसमें ट्रांजिटिव निर्भरताओं का एक गुच्छा था। वर्कअराउंड एक ग्रहण "लाइब्रेरी प्लग-इन" बनाना था जैसा मैंने उपरोक्त वर्णित दो पोम फाइलों के साथ किया था। हमने शुरुआत में एक खाली libs फ़ोल्डर के साथ एक कंकाल प्लग-इन बनाया। एक पोम फ़ाइल <packaging>jar</packaging>
के साथ एक मानक मेवेन पोम फ़ाइल है जो जर्सी जेएक्स-आरएस कार्यान्वयन और इसकी सभी निर्भरताओं को खींचने के लिए आवश्यक शीर्ष-स्तरीय निर्भरताओं की घोषणा करती है। निर्भरता <scope>compile</scope>
के साथ घोषित की जाती है। हम प्रोजेक्ट के libs फ़ोल्डर में उन सभी निर्भरताओं की प्रतिलिपि बनाने के लिए मेवेन-निर्भरता-प्लगइन का उपयोग करते हैं।
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>compile</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>libs</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
हम वास्तव में समय-libs अद्यतन करने के लिए समय के लिए हाथ से कि पोम साथ Maven चल रहा समाप्त हो गया, और फिर हम सिर्फ स्रोत नियंत्रण में प्लग में जाँच की अपनी निर्भर जार के सभी के साथ।
बाद में निर्माण की जांच कर रहा है, मैं देखता हूं कि हम वास्तव में निर्माण के मेवेन/टाइको भाग को शुरू करने से पहले एक अलग बिल्ड कार्य के साथ मेवेन के साथ ऑन-द-फ्लाई पर पॉप-अप फ़ोल्डर को पॉप्युलेट करते हैं। बेशक, प्लग-इन की मैनिफ़ेस्ट-एमएफ फ़ाइल की बंडल-क्लासपाथ और निर्यात-पैकेज प्रविष्टियां सीधे स्रोत नियंत्रण से आ रही हैं। हमें यह सुनिश्चित करने के लिए समय-समय पर जांचना होगा कि वे पुस्तकालयों और पैकेजों से मेल खाते हैं जिन्हें हम मेवेन से प्राप्त कर रहे हैं। (जब तक हम प्रमुख पुस्तकालय संस्करणों को टक्कर नहीं देते हैं या मेवेन स्तर पर एक नई निर्भरता जोड़ते हैं, तब तक यह बहुत कुछ नहीं बदलता है।) प्लग-इन के build.properties में bin.includes के हिस्से के रूप में libs/फ़ोल्डर है।
विकास वातावरण में, हम कोड को पहली बार जांचने के बाद, हम परियोजना की "प्रति निर्भरता" पोम फ़ाइल पर एमवीएन (बाहरी उपकरण लॉन्च कॉन्फ़िगरेशन के साथ भी जांच की जाती है) चलाते हैं। यह सभी जेएक्स-आरएस पुस्तकालयों और निर्भरताओं के साथ libs फ़ोल्डर populates।जब हम निर्भरताओं के बारे में कुछ अपडेट करते हैं या जब हम जेएक्स-आरएस निर्भरताओं के विभिन्न संस्करणों के बीच कूदते हैं तो हमें केवल इसे फिर से चलाने पड़ते हैं। हमने यह सुनिश्चित करने के लिए .gitignore सेट किया है कि हम गिट को libs नहीं करते हैं।
इस परियोजना के लिए अन्य पोम <packaging>eclipse-plugin</packaging>
के साथ एक सामान्य टाइपो पोम फ़ाइल की तरह स्थापित किया गया है। हमारे स्वचालित निर्माण के दौरान, हम निर्माण प्रक्रिया में केवल एक कदम चलाते हैं (चेक आउट के बाद) जो कि जीआर पोम के साथ एमवीएन को libs को पॉप्युलेट करने के लिए कहते हैं। फिर हम ग्रहण-प्लगइन पोम का उपयोग करके मुख्य मेवेन/टाइको बिल्ड के साथ आगे बढ़ते हैं। ग्रहण-प्लगइन पोम की कोई निर्भरता जानकारी नहीं है (जैसा कि मैंने उपरोक्त कहा है)। यह सिर्फ टाइको को ग्रहण प्लग-इन को पहचानने और इसे MANIFEST.MF और build.properties फ़ाइलों के आधार पर बनाने का एक तरीका प्रदान कर रहा है। लेकिन निर्मित प्लग-इन में उन सभी libs को शामिल और उजागर किया गया है जो एमआरएन कॉल द्वारा जार पोम चरण में पॉप्युलेट किए गए थे।
तो, यह एक गड़बड़ है, लेकिन यह एक अच्छा समाधान है जिसे हमने कुछ साल पहले पाया जब हमने इस समस्या को मारा। मुझे यकीन नहीं है कि क्या टाइको कुछ प्रकार के हाइब्रिड मेवेन/टाइको बिल्ड को अनुमति देने के लिए कोई काम कर रहा है जो बिल्ड के हिस्से के रूप में स्वचालित रूप से ऐसा कर सकता है। मुझे लगता है मुझे डेवलपर्स से पूछना चाहिए। :)
आपके प्रश्नों:
- मैं कहां से निर्भरता जोड़ सकता हूँ? मेरी परियोजना में जार पैकेजिंग के साथ कोई पोम नहीं है। उत्तर: उपरोक्त कामकाज आपको इसे एक परियोजना के साथ करने देता है। आपके पास दो पोम फ़ाइलें हैं, जैसे pom_deps.xml और pom.xml। आपको libs फ़ोल्डर (देव पर्यावरण में और अपने स्वचालित निर्माण के साथ) को पॉप्युलेट करने के लिए अलग से pom_deps.xml को आवेदना देना होगा।
- क्या मुझे जरूरी जार के साथ एक अलग परियोजना बनाना चाहिए? मैं अपनी पूरी परियोजना पर निर्भरता कैसे शामिल करूं? उत्तर: ऊपर वर्णित कामकाज आपको इसे एक परियोजना के साथ करने देता है। ऐसा करने का एक और तरीका एक अलग जेएआर प्रोजेक्ट बनाना है, लेकिन मुझे नहीं लगता कि आपका ग्रहण आरसीपी ऐप वास्तव में एक उपयोगी तरीके से
<packaging>jar</packaging>
मॉड्यूल शामिल कर सकता है। ऐसा करने का एकमात्र तरीका यह है कि एक समान कामकाज का उपयोग करना है। आप पहले जेएआर मॉड्यूल का निर्माण करते हैं, इसे मैवेन रिपोजिटरी में इंस्टॉल करें, और फिर अपनी प्लग-इन परियोजनाओं में से एक को अपने libs फ़ोल्डर में JAR को बंडल करें। (यदि आप वास्तव में ऐसा करना चाहते हैं, तो पूछें। हमारे पास एक ऐसा मामला है जहां हमें यह भी करना है, और मैं विकास में किए गए कदम और इसे काम करने के लिए निर्माण प्रदान कर सकता हूं। मुझे लगता है कि एकल परियोजना कामकाज जो मैंने उपरोक्त प्रदान किया है, वह आपके मामले के लिए अधिक समझ में आता है।)
- क्या यह वास्तव में एक अलग प्लगइन बनाने और इस आरसीपी ऐप के लिए एक सुविधा बनाने के लिए एक अच्छा अभ्यास है? उत्तर: यह वास्तव में एक अलग सवाल है। यदि आपके पास एकाधिक प्लग-इन वाली सुविधा है, तो आपको एक ही समस्या है। Tycho उत्पाद/फीचर/प्लग-इन को संभाल सकता है, लेकिन यह मेवेन-आधारित निर्भरता रिज़ॉल्यूशन में नहीं जा सकता है। मौलिक मुद्दा है कि ग्रहण प्लग-इन नहीं "देख" सकता एक नंगे जार पुस्तकालय: आप एक ही समाधान
सारांश का उपयोग किए पहुंच जाएंगे। प्लग-इन को पुस्तकालय को स्थानीय लिब्स फ़ोल्डर (मैनिफ़ेस्ट.एमएफ में मिलान करने वाली बंडल-क्लासपाथ प्रविष्टि के साथ) में शामिल करने की आवश्यकता है, या इसे किसी अन्य प्लग-इन पर निर्भर करने की आवश्यकता है जो उचित पैकेज निर्यात करता है। Tycho बस ग्रहण प्लग-इन के माध्यम से निर्भरताओं को हल करता है, और यह सीधे जेएआरएस के एक समूह में खींचने के लिए सामान्य मेवेन निर्भरता संकल्प का लाभ नहीं उठा सकता है। यदि आपकी सभी निर्भरताएं पहले ही प्लग-इन हैं, तो आप ठीक हैं। यदि नहीं, तो आपको अपने प्लग-इन का उपयोग करने के लिए पुस्तकालयों के एक सेट को पैकेज करने के लिए ऊपर दिए गए वर्कअराउंड का उपयोग करना पड़ सकता है।
आप किस निर्भरता के बारे में बात कर रहे हैं? तीसरे पक्ष पुस्तकालयों? सबसे आसान तरीका है कि उन्हें प्रोजेक्ट क्लासपाथ में शामिल करना और build.properties फ़ाइलों में निर्माण पर "उन्हें शामिल करने के लिए" पूछें (प्लगइन संपादक के माध्यम से जब आप plugin.xml पर डबल क्लिक करते हैं)।यदि आपको ग्रहण-प्लगइन निर्भरताओं की आवश्यकता है, तो आप उन्हें प्लगइन संपादक के साथ भी जोड़ सकते हैं। आप भी मेवेन के बारे में बात कर रहे हैं, क्या आप मेवेन के साथ टाइको का उपयोग करते हैं? यदि हां, तो टाइको प्लगइन के साथ मेवेन आपकी प्लगइन.एक्सएमएल/मेनिफेस्ट/build.properties में बिल्लियों का उपयोग करेगा ... आपकी प्लगइन बनाने के लिए फाइलें – titou10
एक मैनिफ़ेस्ट.एमएफ होना चाहिए जो प्रत्येक प्लगइन से जुड़ा हुआ है, जहां आमतौर पर निर्भरता होती है उल्लिखित हैं। – SomeDude
@ titou10 मैं निर्भरता को मैन्युअल रूप से जोड़ना नहीं चाहता .. मैं मेवेन + टाइको का उपयोग कर रहा हूं। मुझे नहीं पता कि किस परियोजना के pom.xml में, मुझे निर्भरता जोड़नी चाहिए। – GGrec