2008-08-26 13 views
11

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

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

स्पष्टीकरण:

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

यहाँ मेरी परियोजना लेआउट है:

/ 
-PluginA 
-PluginB 
-PluginC 
. 
. 
. 

ग्रहण PDE का उपयोग कर, प्रत्येक प्लगइन एक प्रकट है, लेकिन PDE के रूप में कोई build.xml मेरे लिए करता है। एक गुई संचालित प्रक्रिया w/हडसन स्वचालित करने के लिए मुश्किल है। मैं प्रत्येक का निर्माण करने के लिए अपना खुद का build.xml सेट करना चाहता हूं, लेकिन निर्भरताएं हैं और ऑर्डर समस्याएं हैं। ये मुद्दे मैनिफेस्ट फाइलों द्वारा संचालित होते हैं (जो ओएसजीआई आयात का वर्णन करते हैं)। उदाहरण के लिए, प्लगइनसी प्लगइनबी पर निर्भर करता है जो प्लगइन पर निर्भर करता है। उन्हें सही क्रम में बनाया जाना चाहिए। मुझे एहसास है कि मैं बिल्ड ऑर्डर को मैन्युअल रूप से नियंत्रित कर सकता हूं, मैं बिल्ड ऑर्डर निर्भरता प्रबंधन को स्वचालित करने में सहायता के लिए एक टूल ढूंढ रहा हूं।

+0

घोषणात्मक सेवाएं क्यों नहीं काम करती हैं? – drozzy

उत्तर

1

कुछ पुराने सवाल बाहर समापन ...

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

समाधान चींटी, BND, और कुछ कस्टम चींटी कार्य शामिल किया गया। विभिन्न बंडल निर्भरता मैन्युअल रूप से प्रबंधित की जाती हैं। हम पहले से ही चींटी का उपयोग कर रहे थे; बीएनडी और कस्टम कार्यों ने इसे सब एक साथ बांध लिया। कस्टम कार्यों ने अभी सुनिश्चित किया है कि हमारी बीएनडी/ग्रहण परियोजनाएं सिंक हो गईं।

2

हम Buckminster का उपयोग करते हैं। यह एक निर्माण और असेंबली ढांचा है, जो निर्भरताओं के संकल्प, विभिन्न भंडारों से प्राप्त करने, उत्पाद के निर्माण और पैकेजिंग का ख्याल रखता है।

यह एक ग्रहण उपकरण प्रोजेक्ट है। यह पीडीई के साथ अच्छी तरह से एकीकृत करता है।

इसका मतलब है कि आरसीपी बनाने के लिए हम उपयोग किए जाने वाले सभी मेटा-डेटा को हल करने और बनाने के लिए बकमिंस्टर के लिए उपयोगी है। उदाहरण के लिए, manifest.xml और आवश्यकता-बंडल शीर्षलेख Manifest.MF, .product में।

हमें अब प्रत्येक बंडल में कोई भी निर्माण स्क्रिप्ट नहीं मिली है; अब हमारे पास प्रति उत्पाद एक एकल निर्माण है। बकमिंस्टर निर्भरता ग्राफ पर चलने की देखभाल करता है।

हमारे मौजूदा क्रूज़-कंट्रोल/चींटी सिस्टम को इसके साथ काम करने के लिए थोड़ा सा प्रयास किया गया, हालांकि वे (बकिमिंस्टर टीम) ने परियोजना को होस्ट करने के लिए हडसन का उपयोग करना शुरू कर दिया है। मुझे विश्वास है कि उनका निर्माण सेटअप भी डाउनलोड के लिए उपलब्ध है।

हम इसके सापेक्ष बचपन के बावजूद इसके साथ वास्तव में प्रभावित हुए हैं।

हमने Pax-Construct में भी देखा लेकिन हम मेवेन का उपयोग नहीं करना चाहते थे।

हम वर्तमान में इकाई परीक्षण प्रयास को बढ़ाने के लिए Spring DM testing framework पर भी देख रहे हैं।

7

मैवेन 2 सभी तरह से; m2eclipse नामक एक ग्रहण प्लगइन है जिसे इसे प्रबंधित करने में सहायता के लिए कहा जाता है, वास्तव में निर्भरता समस्या हल करता है और फिर कुछ। free online book as documentation है।

विशेष रूप से कई घटक एक साथ bundling के लिए multi-module projects को देखो और Maven बाहर काम का निर्माण आदेश और निर्भरता है।

वहाँ भी एक chapter on the Eclipse integration है।

और यह बस एक ग्रहण किया जाता है और Maven, अगले आप OSGi के लिए कुछ शांत उपहार मिलते हैं:

  • Apache Felix BND Maven plugin अपने प्रकट होता है स्वत: उत्पन्न होगा या बहुत कम से कम आप
  • PAX OPS4J project और उनके Maven मदद प्लगइन्स बूटस्ट्रैपिंग परियोजनाओं में एक बहुत मदद हो सकता है,, लांचर उपलब्ध कराने आदि

और बस मौलिक रूप से, Maven मॉड्यूल मॉडल OSGi के बंडल मॉडल के साथ बिल्कुल फिट बैठता है। हम अब 3 से अधिक वर्षों से मेवेन का उपयोग करके सैकड़ों बंडलों के साथ कई उत्पादों का निर्माण और प्रबंधन कर रहे हैं और यह बहुत अच्छा है।

0

आप विस्तृत कृपया जहां समस्या होती है सकते हैं? आप ओएसजीआई बंडल निर्भरताओं का जिक्र करते हैं। क्या यह रनटाइम के दौरान है? या संकलन समय के दौरान? पहले मामले में आपको घोषणात्मक सेवाओं पर विचार करना चाहिए (ओएसजीआई स्पेक देखें)।

0

हम हडसन PluginBuilder के साथ संयुक्त हमारे एक्लिप्स आधारित OSGi बंडलों/प्लगइन को बनाने के लिए उपयोग। यह प्लगइन्स बनाने के लिए एक्लिप्स की मानक पीडीई प्रक्रिया पर बनाता है। इसका मतलब है ग्रहण के रूप में ग्रहण का उपयोग करना।

2

सेकेंडिंग मैवेन 2। बिल्डिंग के लिए टाइको प्लगइन्स में देखें - वे ग्रहण के जेडीटी कंपाइलर का उपयोग करते हैं, इसलिए यह संकलन समय पर सभी ओएसजीआई नियम लागू करता है, वैसे ही एक्लिप्स रनटाइम पर भी करता है।

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

1

पीडीई हेडलेस बिल्ड। यह ग्रहण द्वारा अच्छी तरह से प्रलेखित है। यदि आप एक्लिप्स प्लगइन बना रहे हैं, और आप कमांड लाइन के माध्यम से ऐसा करना चाहते हैं, तो ग्रहण पीडीई हेडलेस बिल्ड जाने का तरीका है।

0

मैं Maven का उपयोग 3.0.2

mvn उत्पन्न: मूलरूप आदर्श

select 252 - osgi-archetype 
mvn idea:idea 

http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html

देख पोम में इस छोटे से उदाहरण बंडल उपयोग में अपनी निर्भरता को जोड़ने के लिए।एक्सएमएल

<Export-Package>org.foo.myproject.api</Export-Package> 

या

<Import-Package>org.foo.myproject.api</Import-Package> 
0

Maven इंटरनेट कनेक्टिविटी की आवश्यकता नहीं है! मसीह की खातिर, -o स्विच का प्रयोग करें।

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

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