2009-02-15 16 views
10

मैं ग्रहण प्लगइन्स लिखता हूं और कुछ वर्गों को एपीआई के रूप में निर्यात करता हूं जबकि अन्य वर्गों तक पहुंच प्रतिबंधित करना चाहता हूं।".internal" पैकेज तक पहुंच नियंत्रित करने के लिए सर्वोत्तम अभ्यास

मैं इन कक्षाओं को "शाश्वत" उप-पैकेज में अलग करने के सामान्य ग्रहण अभ्यास का पालन करता हूं।

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

इन एपीआई के उपयोगकर्ताओं को अपने उद्देश्यों के लिए उपयोग करने से रोकने के लिए मेरे एपीआई के उपयोगकर्ताओं को रोकने या हतोत्साहित करने का सबसे अच्छा अभ्यास क्या है? क्या कोई स्वचालित चेकर है?

मैं स्वीकार करते हैं कि मैं ग्रहण के आंतरिक वर्ग के कुछ का उपयोग कर में dabbled है जब मेरे पास कोई विकल्प :)

स्पष्टीकरण था: मैं गैर प्लगइन कोड के साथ एक समान की जरूरत है।

उत्तर

7

क्या यह सिर्फ मेटा-आईएनएफ/MANIFEST.MF को प्लग-इन ओजीआई प्रोजेक्ट होने के लिए अपडेट करने का मामला नहीं है (यदि यह पहले से नहीं है?)। इसे कुछ ऐसा दिखना चाहिए:

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: My-plugin 
Bundle-SymbolicName: com.mycompany.mypluginname 
Bundle-Version: 1.0.0 
Bundle-Vendor: MyCompany 
Bundle-RequiredExecutionEnvironment: JavaSE-1.6 
Service-Component: 
Import-Package: org.apache.log4j;version="1.2.14" (, separated etc) 
Export-Package: com.mycompany.mypluginname.myapipackage;version="1.0.0" 

और फिर अच्छी तरह से। आंतरिक पैकेज को छोड़ दें। मंच को बाकी करना चाहिए।

वैसे, आप आयात-पैकेज का उपयोग करते हैं: किसी भी आश्रित बंडल, प्लगइन्स इत्यादि में जार/प्रोजेक्ट (जो पुराना, चूसने वाला तरीका है जो काम नहीं करता है) के आधार पर - जैसा कि आप हैं खोज)।

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

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

+0

यही मैं अभी करता हूं, हालांकि मेरे कुछ प्लगइन्स में कोड कोड भी शामिल है जो मैं सर्वर कोड में उपयोग करता हूं, ओजीएसआई के माध्यम से नहीं। – Uri

+0

सर्वर विकास के लिए ओएसजीआई जानकारी का उपयोग करने के लिए ग्रहण स्थापित करने से आपको कुछ भी रोक नहीं है। रनटाइम क्लासपाथ और आपकी बिल्ड स्क्रिप्ट्स उतनी ही रह सकती हैं जितनी वे हैं। जैसे अपने क्लाइंट जार के लिए ओएसजीआई प्रकट करें। यह वास्तव में कुछ भी नुकसान नहीं पहुंचाता है ... – Stephen

-5

जब तक आपको अपनी विश्वसनीय लाइब्रेरी का उपयोग करके किसी और के अविश्वसनीय कोड को संभालना नहीं है, तो कृपया इसे प्रतिबंधित न करें।

आंतरिक/पैकेज पहुंच की आवश्यकता कभी-कभी आपके एपीआई डिज़ाइन की विफलता को इंगित करती है, और आप लंबे समय तक नहीं जान सकते हैं।

इसे सार्वजनिक बनाएं, इसे आंतरिक नाम दें, और इसके साथ रहें।

+1

अलगाव बहुत महत्वपूर्ण है - यह कॉल करने वालों का कहना है कि आप एपीआई के रूप में क्या चाहते हैं और आप एपीआई के रूप में क्या नहीं चाहते हैं। स्पष्ट रूप से निर्यात नहीं किया गया कोई भी संगत-ओवर-टाइम इंटरफ़ेस नहीं है। उसने कहा - कॉलर ग्रहण करने के लिए इसे चेतावनी देने के लिए कह सकता है ... –

+0

मुझे एक बार कई बार निपटना पड़ा जहां चीजें आंतरिक थीं जो सार्वजनिक होनी चाहिए थीं। – Joshua

+1

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

2

प्लगइन परियोजनाओं के लिए: स्टीफन का उल्लेख है कि मैनिफेस्ट सेटअप का उपयोग करें। (आप भी प्रकट संपादक की "क्रम" पृष्ठ के माध्यम से इस संपादित कर सकते हैं। ध्यान दें कि यदि आप केवल विशिष्ट प्लग करने के लिए एक पैकेज को बेनकाब करना चाहते हैं तो आप उस के रूप में अच्छी तरह से उपयोग कर सकते हैं

Export-Package: com.javadude.foo;x-friends:="com.javadude.fee" 

गैर प्लगइन के लिए परियोजनाएं: अपनी परियोजना से निर्यात किए जाने वाले परिभाषित करने के लिए अलग-अलग स्रोत फ़ोल्डर का उपयोग करें।

  1. राइट-क्लिक करें परियोजना और नए स्रोत फ़ोल्डर (शायद इसे नाम "आंतरिक स्रोत")
  2. राइट-क्लिक करें परियोजना और चुनें गुण
  3. जावा पर जाएं बिल्ड पथ
  4. आदेश पर क्लिक करें और निर्यात टैब
  5. सही का निशान हटाएँ स्रोत फ़ोल्डर

केवल स्रोत फ़ोल्डर "आदेश और निर्यात" के अंतर्गत जाँच कर रहे हैं निर्यात करने के लिए नहीं करना चाहते हैं जाएगा संदर्भ परियोजनाओं के वर्गपथ में जोड़ा जाना चाहिए।

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