2009-11-18 19 views
8

मुझे आश्चर्य है कि जावा डेस्कटॉप एप्लिकेशन, स्टार्टअप पर, कुछ यूआरएल देखें, यह देखने के लिए कि क्या इसे अपडेट की आवश्यकता है, और यदि आवश्यक जार फाइलें डाउनलोड करें, और जोड़ें उन्हें चल रहे कार्यक्रम के लिए कक्षा के लिए।जावा में रनटाइम पर JAR फ़ाइलों को डाउनलोड करना

यदि पुराने जार हैं, तो उन्हें अभी तक क्लासलोडर में लोड नहीं किया जाना चाहिए था, इस बिंदु पर उन्हें चाहिए? आवेदन को पुनरारंभ करने के बाद w/आउट लोड होने से पहले उन्हें बाहर निकालना संभव है?

उत्तर

1

यह संभव है लेकिन त्रुटि के लिए प्रवण है।

कुछ हद तक क्लीनर दृष्टिकोण "लॉन्चर" एप्लिकेशन होना है जो पर निर्भर नहीं है अद्यतन करने योग्य JARs के पर निर्भर करता है और फिर वास्तविक ऐप लॉन्च करता है।

आप इस विषय पर अधिक जानकारी के लिए this question देख सकते हैं।

11
+0

यही वह है जो मैं आम तौर पर करता हूं। मेरे पास एक ऐसा एप्लिकेशन है जो सामान्य रूप से jnlp होगा, लेकिन इस विशेष परिदृश्य में मैं इस एप्लिकेशन को पहले से चल रहे वीएम से लॉन्च करने जा रहा हूं, और इसे उसी वीएम में शुरू करूंगा। वह हिस्सा काम कर रहा है। समस्या वह एप्लिकेशन है जो सामान्य रूप से जेएनएलपी को अपडेट करना आसान नहीं है, और इसे अन्य ऐप शुरू करने के लिए इसके क्लासपाथ में कुछ आश्रित जार की आवश्यकता होगी। जेएनएलपी यह सब हल करेगा, लेकिन एकल वीएम आवश्यकता बाधा है। – broschb

3

यह संभव होना चाहिए। URLClassLoader शुरू करने के लिए एक जगह है।

1

जावा वेब स्टार्ट शायद आपकी सबसे अच्छी शर्त है। जरूरी जार फ़ाइलों को डिस्क्रिप्टर में पहचाना जाना चाहिए ताकि आप संस्करण नियंत्रण को प्रबंधित कर सकें।

यदि आपके पास एक गतिशील अनुप्रयोग है जिसे रनटाइम पर गतिशील रूप से कक्षाओं को खोजने और डाउनलोड करने की आवश्यकता है, तो आप Dynamic code downloading using RMI देख सकते हैं।

1

जावा वेब स्टार्ट एक अच्छा विकल्प है लेकिन कुछ quirks है। विशेष रूप से:

  • प्रोग्राम जिसे अपडेट किया गया है, प्रोग्राम शुरू होने से पहले डाउनलोड किया जाना चाहिए। एक और आधुनिक दृष्टिकोण अपडेट डाउनलोड करेगा और अगली शुरुआत में उन्हें लागू करेगा।
  • डिफ़ॉल्ट एक सैंडबॉक्स के अंदर है। यदि आपको इसके बाहर जाने की आवश्यकता है तो आपको अपने कोड पर हस्ताक्षर करना होगा, जो तब तक बोझिल है जब तक आप तैनाती प्रक्रिया को स्वचालित नहीं करते (या Netbeans का उपयोग करें जो काफी मदद करता है)।
  • समस्याएं डीबग करना आसान नहीं है - केवल टूल जावा कंसोल में पूर्ण ट्रेस सक्षम कर रहा है।
  • क्लाइंट में जार का कैशिंग त्रुटि प्रवण है। जब आप अपडेट करते हैं, तो सुनिश्चित करें कि यूआरएल प्रत्येक परिनियोजन घटक के लिए अद्वितीय है ताकि कैश का उपयोग नहीं किया जा सके।

लेकिन जब यह काम करता है तो यह बहुत अच्छी तरह से काम करता है। मेरे ज्ञान के लिए एक केंद्रीकृत संस्करण को किसी दिए गए जावा एप्लिकेशन के आसानी से अपडेट करने का सबसे आसान तरीका है।

-
संपादित करें: ऐसा लगता है कि जल्द ही "कार्यक्रम शुरू करने और पारदर्शी रूप से अपडेट डाउनलोड यदि उपलब्ध हो तो" कार्यक्षमता नवीनतम जावा 6. मैं फिर भी यह प्रयास नहीं किया है में मौजूद है, लेकिन होगा।

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