2010-06-22 14 views
9

और समर्थक के कंस का उपयोग करने के लिए क्या हैं?जावा में संकलन समय पुस्तकालयों और रन टाइम पुस्तकालयों का क्या अंतर है?

मैंने वास्तव में इसे परियोजना गुणों> जावा अनुप्रयोगों के लिए पुस्तकालयों के तहत नेटबीन में देखा। हम दो टैब, संकलन समय पुस्तकालयों और चलाने के समय पुस्तकालयों के लिए एक है, और हम करने के लिए एक पुस्तकालय में जोड़ सकते हैं की तरह यह लग रहा है या तो एक दूसरे

+1

किसने आपको बताया कि जावा में आपकी पसंद है? –

+0

शायद आप संकलन और रनटाइम क्लासपाथ के बीच भेद से उलझन में हैं? – akf

+0

@ निकिता/एएफएफ मैंने वास्तव में इसे परियोजना गुणों> जावा अनुप्रयोगों के लिए पुस्तकालयों के तहत नेटबीन में देखा। हमारे पास दो टैब हैं, एक संकलन समय पुस्तकालयों और रन टाइम लाइब्रेरीज़ के लिए, और ऐसा लगता है कि हम एक दूसरे से स्वतंत्र होने के लिए एक लाइब्रेरी जोड़ सकते हैं – jonasespelita

उत्तर

7

लाइब्रेरी गुण संवाद का यूआई और शब्दावली बहुत भ्रमित है।

उस संवाद पर सहायता बटन आपको थोड़ी सी जानकारी देगा।

संकलन-समय लाइब्रेरी सूची रन-टाइम लाइब्रेरी सूची का सबसेट हो सकती है।

इस स्थिति ...

आप स्रोत कोड है कि एक पुस्तकालय पर से कक्षाओं का आयात करता है 'widgets.jar' पर विचार करें। Jar फ़ाइल 'xml.jar' से widgets.jar संदर्भ प्रतीकों में वर्ग फ़ाइलें। यदि आपका स्रोत कोड xml.jar से कक्षाएं आयात नहीं करता है, तो आप संकलित-समय पुस्तकालय सूची को केवल widgets.jar रखने के लिए परिभाषित कर सकते हैं।

जब आप अपनी प्रोजेक्ट को चलाने का प्रयास करते हैं, तो आपको क्लासनेटफॉउंडएक्सप्शन को रोकने के लिए रन-टाइम लाइब्रेरीज़ सूची में xml.jar को शामिल करने की आवश्यकता होगी।

+0

यही वह था जिसे मैं ढूंढ रहा था। धन्यवाद! – jonasespelita

+0

@ एल्पिन: कभी-कभी। StackOverflow पर टिप्पणियों में एक प्रश्न एम्बेड करना वास्तव में StackOverflow के उद्देश्य को हरा देता है। एक प्रश्न पूछने के लिए http://stackoverflow.com/questions/ask का उपयोग करने से बड़ी संख्या में उत्तरदाताओं से बेहतर प्रतिक्रिया मिलेगी। – vkraemer

11

संकलन समय पुस्तकालयों बनाम क्रम के रूप में कोई ऐसी बात नहीं है की स्वतंत्र पुस्तकालय

शायद आप कुछ अवधारणाओं को मिश्रित कर रहे हैं।

जावा में उपयोग किए जाने वाले पुस्तकालयों को संकलित समय पर स्थिर रूप से मान्य किया जाता है और रनटाइम पर भी मान्य किया जाता है।

उदाहरण के लिए यदि आप Apache Collections लाइब्रेरी में निर्दिष्ट IterableMap का उपयोग करना चाहते हैं। कंपाइलर "संकलन समय पर" मान्य करता है जिसे आप उस वर्ग में मौजूद एक विधि का आह्वान कर रहे हैं।

लेकिन कंपाइलर उस लाइब्रेरी के साथ कुछ भी लिंक या लिंक नहीं करता है, फिर भी आपको रनटाइम पर इसकी आवश्यकता होती है। इसलिए, जब आपका कोड निष्पादित होता है, तो जावा रनटाइम, उस कक्षा के लिए फिर से खोज करता है, और संकलक सत्यापित सत्यापित विधि को आमंत्रित करता है।

और वह क्या है।

+0

जानकारी के लिए धन्यवाद। लेकिन क्या प्रतिबिंब है? अगर हम प्रतिबिंब का उपयोग कर कक्षा का उपयोग करने का प्रयास करते हैं, तो संकलक शिकायत नहीं करेगा, है ना? कुछ ऐसा है [यह] (http://www.java-tips.org/java-se-tips/java.lang.reflect/invoke-method-using-reflection.html) – bdhar

+3

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

+0

धन्यवाद स्टीफन .. – bdhar

0

जैसा कि अन्य ने कहा है, आप अवधारणाओं को भ्रमित कर रहे हैं। मुझे लगता है कि आप वास्तव में समझने की कोशिश कर रहे हैं कि Mavendependency scope के रूप में संदर्भित है। कभी-कभी आपको केवल संकलन समय पर निर्भरता की आवश्यकता होती है क्योंकि आप इसे रनटाइम पर प्रदान करने की अपेक्षा करते हैं, और कभी-कभी आपको रनटाइम पर इसकी आवश्यकता होती है लेकिन समय संकलित नहीं होती है।

1

शायद, जब आप लाइब्रेरी को गतिशील रूप से लोड करना चाहते हैं, या लाइब्रेरी के अस्तित्व की जांच करना चाहते हैं और फिर कोड निष्पादित करना चाहते हैं तो यह खेल में आता है।

संकलन के दौरान, संकलक को पता होना चाहिए कि क्या कोड सही है या नहीं, यह जानने के लिए विधियों, कक्षाओं के हस्ताक्षर क्या हैं। इसलिए आप संकलन समय पुस्तकालय जोड़ते हैं।

रनटाइम के दौरान, JVM को अभी भी उस विशिष्ट कोड को चलाने के लिए लाइब्रेरी की आवश्यकता है। लेकिन आप लाइब्रेरी मौजूद है या नहीं, उदाहरण के लिए Class.for() विधि करके यह कोड से बचने के लिए तर्क डाल सकते हैं। सिस्टम में कुछ पुस्तकालय पहले से मौजूद हो सकते हैं (उदाहरण के लिए qt.jar) या शायद नहीं, और आप तदनुसार अपना कोड जांच और निष्पादित कर सकते हैं।

अगर मैं गलत हूं तो कृपया मुझे सही करें।

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