2011-11-28 10 views
64

तो जावा जावा को तैनात करने के लिए मैं जावा वेब स्टार्ट का उपयोग करूँगा। एक रननेबल जार में निर्यात करते समय, ग्रहण हेलीओस में तीन विकल्प हैं।रनने योग्य जार लाइब्रेरी हैंडलिंग विकल्पों के बीच क्या अंतर है?

  • निकालें जार जार के बगल में उप फ़ोल्डर में
  • कॉपी आवश्यक पुस्तकालयों जार में
  • पैकेज आवश्यक पुस्तकालयों में आवश्यक पुस्तकालयों।

अंतर क्या हैं, और वे मेरी .jnlp फ़ाइल को कैसे प्रभावित करेंगे?

यदि यह एक सिंगल जार है, तो यह आसान नहीं है क्योंकि मुझे उन सभी पुस्तकालयों के सभी अलग-अलग पथ लिखने की ज़रूरत नहीं है?

यदि लाइब्रेरी और एप्लिकेशन दोनों में बदलाव हैं, तो एक जार बेहतर समाधान होगा? या मुझे प्रत्येक व्यक्तिगत पुस्तकालयों के लिए <jar href=''> की आवश्यकता होगी?

यह भी ध्यान दें कि मुझे देशी पुस्तकालयों जैसे .dll और .so फ़ाइलों का उपयोग करने की आवश्यकता है।

उत्तर

115
  1. निकालें JAR में आवश्यक पुस्तकालयों - पुस्तकालयों अपने अनुप्रयोग का उपयोग करता है से वास्तविक .class फ़ाइलों अर्क और runnable जार के अंदर उन .class फ़ाइलों डालता है। इसलिए, चलने योग्य JAR में आपके आवेदन की .class फ़ाइलें न केवल आपके अनुप्रयोगों के सभी पुस्तकालयों की .class फ़ाइलें शामिल होंगी।

  2. पैकेज जार में आवश्यक पुस्तकालयों - अपने runnable जार में पुस्तकालयों की रखता है वास्तविक जार फ़ाइलों। आम तौर पर, एक जेएआर फ़ाइल के भीतर एक जेएआर फ़ाइल जेवीएम द्वारा लोड नहीं की जा सकती है। लेकिन ग्रहण संभव बनाने के लिए चलने योग्य जार में विशेष कक्षाएं जोड़ता है।

  3. कॉपी उप फ़ोल्डर अगले में आवश्यक पुस्तकालयों जार करने के लिए - runnable जार से पूरी तरह अलग पुस्तकालय जार रखता है, इसलिए runnable जार केवल अपने आवेदन के .class फ़ाइलें शामिल होंगी।

विकल्प # 2 सुविधाजनक है क्योंकि यह एक एकल जार में बड़े करीने से सब कुछ पैकेज है, और अपने आवेदन की .class फ़ाइलों से अलग पुस्तकालय जार रहता है।

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

+0

+1 धन्यवाद, बहुत विस्तृत उत्तर। – KJW

+0

उत्सुक, सिर्फ एक जार बनाने के बारे में क्या है जो चलाने योग्य नहीं है? क्या कोई अंतर है? – KJW

+8

@ किमजोंगवू आप इस 'जावा -जर myjar.jar' जैसे रनने योग्य जेएआर "निष्पादित" कर सकते हैं क्योंकि JAR अपनी "मेटा-आईएनएफ/मैनिफ़ेस्ट.एमएफ" फ़ाइल में' मुख्य() 'विधि के स्थान को परिभाषित करता है। इस फ़ाइल के अंदर "मुख्य श्रेणी" सेटिंग उस वर्ग को परिभाषित करती है जिसमें 'मुख्य()' विधि है। "सामान्य" JARs में यह सेटिंग नहीं होती है, इसलिए आप उन्हें उसी तरह "निष्पादित" नहीं कर सकते हैं। – Michael

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