2009-06-23 12 views
29

यह मुझे कई वर्षों से परेशान कर रहा है, और मैंने सोचा कि आप में से एक ठीक लोगों को पता चलेगा - ग्रहण की क्लासपाथ फाइलों में, वास्तव में क्लासपैंट्री तत्व के संयोजन का गुण क्या है?ग्रहण कक्षाओं में गठबंधन का मतलब क्या है?

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

मुझे उम्मीद है कि किसी और ने इसे अच्छे उपयोग के लिए रखा है, और मैं उनके विचार चुरा सकता हूं। असल में, यह एक खुजली है जिसे मैं खरोंच करने की कोशिश कर रहा हूं।

उत्तर

25

उत्तर देता पहुँच नियमों के समुचित उपयोग के साथ आप "आंतरिक" और/या "गैर-एपीआई" कक्षाओं और विधियों का उपयोग रोकने से रोक सकते हैं। जब आप फॉरबिडन या निराश संकलित करते हैं तो संकलक एक त्रुटि या चेतावनी दिखाता है जब आप उस पैकेज या क्लास को निर्दिष्ट पैकेज से उपयोग करते हैं तो एक त्रुटि या चेतावनी दिखाते हैं। एक्सेस नियमों के लंबे परिचय के लिए आपको this short article पढ़ना चाहिए।

गठबंधन पहुँच नियमों का पालन स्थिति की कल्पना का उपयोग कर के लिए:

  • आप 2 परियोजनाओं, ए और बी
  • है परियोजना एक के classpath पर एक जार फ़ाइल को निर्यात किया जाता है नहीं है। जार में कुछ "स्थिर एपीआई", "अस्थिर एपीआई" और "गैर-एपीआई" सार्वजनिक वर्ग शामिल हैं।
  • परियोजना बी परियोजना ए

ताकि आप सेट कुछ उन वर्गों/पैकेज पर पहुँच नियमों निषिद्ध आप परियोजना एक में "गैर-api" वर्गों का उपयोग की अनुमति नहीं है पर निर्भर करता है।

प्रोजेक्ट बी में आप "गैर-एपीआई" का उपयोग करने की अनुमति नहीं देते हैं, लेकिन आप "अस्थिर एपीआई" का उपयोग करते समय चेतावनी प्राप्त करना चाहते हैं। इस मामले में प्रोजेक्ट बी में आपको केवल डिस्कार्ज किए गए एक्सेस नियमों को सेट करना होगा यदि आप निर्यात किए गए प्रोजेक्ट प्रविष्टियों के एक्सेस नियमों के साथ नियमों को संयोजित करते हैं।

+0

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

+1

यदि आप सामान्य जावा प्रोजेक्ट की बजाय प्लग-इन प्रोजेक्ट का उपयोग करते हैं, तो पीडीई स्वचालित रूप से आपके मेनिफेस्ट फ़ाइल के आधार पर आपके लिए इन एक्सेस नियमों को उत्पन्न करेगा। –

1

हालांकि मैंने इसे कभी भी उपयोग नहीं किया है, इसमें थोड़ा सा here पाया जा सकता है।

है कि क्या इस परियोजना के निर्यात प्रविष्टियों की पहुँच नियम इस प्रविष्टि की पहुंच नियमों के साथ जोड़ा जाना चाहिए

पहुँच नियम "com/परीक्षण/**" सहित

3

पहुँच की तरह कुछ होगा नियम आसान छोटी चीजें हैं, लेकिन खतरनाक हैं। वे प्रोजेक्ट कंपाइलर से स्रोत फ़ाइल को बहिष्कृत करते हैं लेकिन फ़ाइल सिस्टम में फ़ाइल को बरकरार रखते हैं।

जिस परियोजना पर मैं काम करता हूं वह हमारे स्रोत फ़ोल्डर में से एक में बूटस्ट्रैप क्लास है, लेकिन अगर हम पूरे फ़ोल्डर को प्रोजेक्ट क्लासपाथ शामिल करते हैं तो यह संकलित नहीं होगा (यह एक लंबी कहानी है और निर्माण प्रक्रिया इसे संभालती है)।

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

जावाडॉक द्वारा निर्णय लेने वाले एक्सेस नियमों का संयोजन, वास्तविक अत्याधुनिक केस है। इसका इस्तेमाल करने के लिए आपके पास करने के लिए होगा:

  • एक परियोजना की एक निर्यातित स्रोत प्रविष्टि में एक पहुँच नियम
  • एक माता पिता परियोजना
  • की पहुँच नियम गठबंधन करने के लिए एक की जरूरत से है कि परियोजना के लिए एक लिंक माता पिता के साथ उप परियोजना

मैं वास्तव में यह नहीं कह सकते कि यह कैसे उपयोगी होगा, लेकिन मुझे आशा है कि कम से कम अपने "यह क्या है" सवाल :)

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