2012-11-22 25 views

उत्तर

13

ओएसजीआई कंटेनर में रनटाइम पर यह कुछ भी नहीं करता है। वास्तव में, ओएसजीआई विनिर्देशन में भी इसका उल्लेख नहीं किया गया है (मैंने आर 4 की जांच की है)।

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

Private-Package के लिए दस्तावेज़ के रूप में पढ़ता:

निजी पैकेज

शामिल किए जाने की विधि निर्यात-पैकेज हैडर के समान है, फर्क सिर्फ इतना है, कि इन पैकेजों नहीं हैं निर्यात किया। यह हेडर मैनिफेस्ट में कॉपी किया जाएगा। यदि निर्यात पैकेज और निजी पैकेज हेडर द्वारा पैकेज का चयन किया जाता है, तो निर्यात को प्राथमिकता मिलती है।

निजी-पैकेज = कॉम। *

3

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

11

यदि आप जानते हैं कि स्थिर लिंकिंग तब आप निजी-पैकेज को समझते हैं। अन्यथा पढ़ें।

निजी-पैकेज आपको उन पैकेजों को बताने का तरीका है जो जार के अंदर होना चाहिए लेकिन निर्यात नहीं किया जाता है। यह एक ओएसजीआई हेडर लेकिन एक बीएनडी 'निर्देश' है।

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

सामान्य निजी पैकेज में उन वर्गों को रखने वाले पैकेज निर्दिष्ट किए जाते हैं जिन्हें अन्य बंडलों के साथ साझा नहीं किया जाना चाहिए, यानी कार्यान्वयन कक्षाएं। हालांकि आम तौर पर वे इसी परियोजना से आते हैं कि बीएनडी का उपयोग कक्षा में किसी भी अन्य जार से प्राप्त करने के लिए पूरी तरह से स्वीकार्य है।

एक उपयोग केस यूटिल के साथ एक पुस्तकालय है। एक बंडल में उपयोग लाइब्रेरी को चालू करना आम तौर पर निर्भरताओं के साथ विनाश को तोड़ रहा है क्योंकि यूटिल कई असंबद्ध चीजों पर निर्भर करता है; आप एक छोटी सी विधि का उपयोग करते हैं और अचानक आप 30 एमबी निर्भरताओं में खींचते हैं। bnd खुद aQute.lib * संकुल के साथ इस मॉडल का भारी उपयोग करता है, इस पुस्तकालय के संकुल को कभी भी निर्यात नहीं किया जाना चाहिए। यह बंडल आकार और 'इंटरनेट डाउनलोड करने' के बीच का व्यापार है।अंतर ग्रहण और अपाचे फेलिक्स की दुनिया के बीच दिखाई देता है। अपाचे फेलिक्स बंडल आमतौर पर स्टैंडअलोन होते हैं और सभी प्रकार के समर्थन और उपयोग बंडलों की आवश्यकता नहीं होती है जबकि ग्रहण के बंडलों में बहुत सारे नलसाजी बंडलों की आवश्यकता होती है। मुझे लगता है कि यह अंतर मुख्य रूप से एक्लिप्स के पीडीई के कारण होता है जो अन्य परियोजनाओं से संकुल को शामिल करना असंभव बनाता है जब तक कि आप स्रोत कोड की प्रतिलिपि न लें जो निश्चित रूप से एक बड़ा नो-नो है।

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

अंत में बीएनडी विस्तारित पैकेज दिखाता है जो मैनिफेस्ट में निजी-पैकेज शीर्षलेख में निर्यात नहीं किए जाते हैं। < _removeheaders साथ (या Maven में निजी-पैकेज> निजी-पैकेज

+0

: सब के बाद, एक प्रकट सामग्री का वर्णन करने के लिए ...

आप लेखक हैं, तो आप -removeheaders साथ शीर्ष लेख को हटा सकते हैं माना जाता है क्या मैं पूछ सकता हूं कि बीएनडी सभी गैर-निर्यातित वर्गों को "निजी पैकेज" क्यों नहीं करता है? अगर आपके पास अपनी परियोजना में कोई वर्ग है तो आपको इसकी आवश्यकता है क्योंकि यदि इसे निर्यात नहीं किया गया है, तो यह निजी नहीं होना चाहिए। शब्द, आप निर्यात-पैकेज और न ही निजी पैकेज पैकेज क्यों करते हैं? – Hilikus

+1

आपको निजी पैकेज को नामित करना होगा क्योंकि बीएनडी यह नहीं मानता कि src निर्देशिका से सभी वर्गों को शामिल किया जाना चाहिए, इसलिए कोई गुंजाइश नहीं है जो निर्यात के घटाव की अनुमति देगी पैकेज। बीएनडी के वर्ग पथ पर कोई भी पैकेज एक बंडल में शामिल किया जा सकता है, या तो पीआर ivate या निर्यात किया। इस तरह, बीएनडी अधिकांश निर्माण वातावरण के विपरीत एक एकल परियोजना से कई बंडल का निर्माण कर सकता है। यह एपीआई पैकेजों के निर्यात की भी अनुमति देता है जो बंडल द्वारा प्रदान किए जाते हैं, भले ही वे किसी अन्य बंडल/जार से आते हैं। –

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