जावा अनुप्रयोगों को वितरित करने का सबसे अच्छा तरीका क्या है? [बन्द है]


115

जावा मेरी पसंद की प्रोग्रामिंग भाषाओं में से एक है। मैं हमेशा अपने उपयोगकर्ताओं को अंतिम उपयोगकर्ताओं को वितरित करने के बावजूद समस्या में चला जाता हूं।

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

जावा एप्लिकेशन को वितरित करने का सबसे अच्छा तरीका क्या है? क्या होगा यदि जावा एप्लिकेशन को उपयोगकर्ता के कंप्यूटर पर कलाकृतियों को स्थापित करने की आवश्यकता है? क्या कोई अच्छा जावा इंस्टॉलेशन / पैकेजिंग सिस्टम है?


जावा वेबस्टार्ट का उपयोग किसी भी यूआरएल जैसे कि फाइल सिस्टम जैसे कि सीडी या नेटवर्क ड्राइव से किया जा सकता है। दी यह आप के रूप में ज्यादा नहीं देता है। नोट: ग्रहण एक इंस्टॉलर का उपयोग नहीं करता है, आप इसे अनपैक करें और इसे चलाएं। शायद आपको इंस्टॉलर की आवश्यकता नहीं है।
पीटर लॉरी

1
इन दिनों ऐसे Java WebStart एप्लिकेशन को उदा। Google अनुप्रयोग इंजन पर लागू करना बहुत सरल है।
थोरबजोरन रावन एंडरसन

6
यह शर्म की बात है कि यह सवाल बंद हो गया है। मैं 'मुख्य रूप से राय-आधारित' कहे जाने वाले कारण से असहमत हूं। प्रदान किए गए उत्तर राय के आधार पर नहीं बल्कि अनुभव पर आधारित हैं। मैं हमेशा अनुभव के आधार पर अच्छे उत्तरों का स्वागत करता हूं। जो लोग इतिहास से नहीं सीख सकते वे इसे दोहराने के लिए बर्बाद हैं।
बुलेविर

जावा ऐप्स को वितरित करने के लिए आप jlink (JDK 9 के साथ पेश) का उपयोग कर सकते हैं। यह JDK के साथ आता है। यह आपके लिए एक समर्पित JRE का निर्माण करेगा। आपको क्लाइंट मशीनों पर जावा स्थापित करने की आवश्यकता नहीं है।
ब्लुएयर

जवाबों:


89

आपकी वितरण आवश्यकताओं के आधार पर, विभिन्न प्रकार के समाधान हैं।

  1. बस एक जार का उपयोग करें। यह मानता है कि उपयोगकर्ता के पास सही जावा संस्करण स्थापित है, अन्यथा उपयोगकर्ता को "वर्ग-फ़ाइल प्रारूप संस्करण" अपवाद मिलेगा। यह एक कंपनी के अंदर आंतरिक वितरण के लिए ठीक है।

  2. Launch4j और NSIS जैसे इंस्टॉलर का उपयोग करें। यह आपको बहुत अधिक नियंत्रण प्रदान करता है, हालांकि उपयोगकर्ता अभी भी जावा रनटाइम को अन-इंस्टॉल करने जैसे बेवकूफ सामान कर सकता है। यह शायद सबसे लोकप्रिय दृष्टिकोण है, और वर्तमान में मैं क्या उपयोग करता हूं।

  3. वेबस्टार्ट का उपयोग करें। यह भी मानता है कि उपयोगकर्ता के पास सही जावा संस्करण स्थापित है, लेकिन इसे प्राप्त करना बहुत आसान है। मेरा अनुभव है कि यह कसकर नियंत्रित इंट्रानेट वातावरण के लिए ठीक है, लेकिन बड़ी तैनाती के साथ एक दर्द बन जाता है क्योंकि इसमें कुछ अजीब अजीब विफलताएं हैं। यह जावा 1.7 में नई प्लग-इन तकनीक के साथ बेहतर हो सकता है।

  4. एक्सेलसियर जेईटी जैसे एक देशी-कोड संकलक का उपयोग करें और एक निष्पादन योग्य के रूप में वितरित करें, या इसे एक इंस्टॉलर में लपेटें। महँगा, और यह आम तौर पर आपको जावा के थोड़े पुराने संस्करण से जोड़ता है, और गतिशील वर्ग-लोडिंग के साथ कुछ दर्द है, लेकिन बड़े पैमाने पर तैनाती के लिए यह बहुत प्रभावी है जहां आपको अपने समर्थन बाधाओं को कम करने की आवश्यकता है।


4
बस वेबस्टार्ट पर एक नोट: जब तक उपयोगकर्ता के पास जावा का एक संस्करण स्थापित होता है जो कि पाषाण युग से नहीं है (जैसे 1.2) वेबस्टार्ट को आपके प्रोग्राम के लिए आपके द्वारा आवश्यक एक नया जावा संस्करण डाउनलोड और इंस्टॉल करने के लिए नहीं कहा जा सकता है। अभी तक। .Jnlp फ़ाइल सिंटैक्स को देखें। बेशक यह अभी भी काफी प्रमुख रूप से प्रदर्शित करता है कि आप जावा का उपयोग कर रहे हैं जो आपके द्वारा व्यवहार किए जाने वाले ग्राहकों के आधार पर अनुचित हो सकता है। उन मामलों में आपको वास्तव में "देशी" इंस्टॉलर / फ़ाइल प्रारूप के कुछ प्रकार होने चाहिए और जहां तक ​​संभव हो कार्यान्वयन विवरण छिपाएं।
डैनियल श्नाइलर

10
मुझे वेबस्टार्ट पसंद नहीं है। इसमें बहुत अधिक जावा / सन ब्रांडिंग है। सही काम करना मुश्किल है। कोड पर हस्ताक्षर करना अधिक कठिन है क्योंकि यह मूल्य से अधिक कठिन है और उपयोगकर्ता सुरक्षा लाभों और संदेशों को वैसे भी समझ नहीं पाता है। यदि आप उपयोगकर्ता प्रणाली पर कुछ भी करना चाहते हैं, तो आपको डरावने चेतावनियों से छुटकारा पाने के लिए अपने कोड हस्ताक्षर प्रमाण पत्र के लिए भुगतान करना होगा। यह बहुत सारे जटिल कैशिंग करता है जो समस्याओं का कारण बन सकता है। शायद OSGi या आगामी जावा मॉड्यूल समान ऑटो अपडेट लाभ प्रदान करेंगे। मैं # 2 की भिन्नता का उपयोग करता हूं और सभी चींटी से मैक के लिए DMG / Packager बनाता हूं।
कैल

मैंने आपके सुझाव के अनुसार NSIS का उपयोग किया। मैंने लॉन्च 4 जे को भी देखा। आप दोनों का उपयोग करने की सलाह क्यों देते हैं?
जैकडैड

1
@JackN NSIS एक इंस्टॉलर जनरेटर है। लॉन्च 4 जे विशेष रूप से जावा प्रोग्राम लॉन्च करने / शुरू करने में आसान बनाने के लिए है। उनकी कार्यक्षमता में कुछ ओवरलैप है, लेकिन वे समस्या के विभिन्न हिस्सों को लक्षित कर रहे हैं।
नोएल ग्रैंडिन

+1 शानदार जवाब। क्या आपके पास एक्सेलसियर जेईटी के साथ कोई अनुभव है? क्या यह केवल x86 आर्किटेक्चर का समर्थन करता है और रीयलटाइम जार लाइब्रेरी को लोड करने में असमर्थ है?
KJW

6

उन्नत इंस्टॉलर java apps को विंडोज़ के निष्पादन योग्य के रूप में पैकेज करना आसान बनाता है, और यह आपके द्वारा सेट किए जाने के तरीके में काफी लचीला है। मैंने पाया है कि विंडोज़ ग्राहकों को जावा एप्लिकेशन वितरित करने के लिए, यह जाने का सबसे आसान तरीका है।


5

JSmooth एक सरल प्रोग्राम है जो आपके जार को लेता है और इसे एक मानक विंडोज़ निष्पादन योग्य फ़ाइल में लपेटता है। यह एक सरल GUI के साथ आता है जो आपको आवश्यक JVM को कॉन्फ़िगर करने, एप्लिकेशन के साथ बंडल करने या इसे पहले से इंस्टॉल न होने पर डाउनलोड करने का विकल्प प्रदान करने की अनुमति देता है। आप exe फ़ाइल को भेज सकते हैं या संभव निर्भरता के साथ इसे ज़िप कर सकते हैं (या प्रोग्राम को स्टार्टअप से नेट से अतिरिक्त निर्भरता डाउनलोड करने दें)। यह भी मुफ्त है, जैसा कि बीयर और भाषण में, जो अच्छी बात हो सकती है (या नहीं)।


4

यह इस बात पर निर्भर करता है कि आपके लक्षित उपयोगकर्ता कितने परिष्कृत हैं। ज्यादातर मामलों में आप उन्हें इस तथ्य से अलग करना चाहते हैं कि आप एक जावा-आधारित ऐप चला रहे हैं। उन्हें एक मूल इंस्टॉलर के साथ दें जो सही काम करता है (स्टार्ट मेनू प्रविष्टियां बनाएं, लॉन्चर, ऐड / रिमूव प्रोग्राम्स के साथ रजिस्टर करें, आदि) और पहले से ही एक जावा रनटाइम बंडल करता है (इसलिए उपयोगकर्ता को इसके बारे में जानने या देखभाल करने की आवश्यकता नहीं है)। मैं हमारे क्रॉस प्लेटफ़ॉर्म इंस्टॉलेशन टूल, BitRock InstallBuilder का सुझाव देना चाहूंगा। हालाँकि यह जावा-आधारित नहीं है, यह आमतौर पर जावा अनुप्रयोगों को पैकेज करने के लिए उपयोग किया जाता है। इसे आसानी से चींटी के साथ एकीकृत किया जा सकता है और आप यूनिक्स / लिनक्स / मैक और आसपास के अन्य तरीकों से विंडोज इंस्टालर बना सकते हैं। क्योंकि जेनरेट किए गए इंस्टॉलर देशी हैं, उन्हें लक्ष्य प्रणाली में पहले से मौजूद होने के लिए एक स्व-निष्कर्षण कदम या एक JRE की आवश्यकता नहीं होती है, जिसका अर्थ है छोटे इंस्टॉलर और आपको कुछ सिरदर्द बचाता है। मैं यह भी उल्लेख करना चाहूंगा कि हमारे पास मुक्त स्रोत परियोजनाओं के लिए मुफ्त लाइसेंस हैं


3

निष्पादन योग्य फ़ाइलें सर्वश्रेष्ठ हैं, लेकिन वे प्लेटफ़ॉर्म सीमित हैं यानी कि gcj का उपयोग करें : http://gcc.gnu.org/java/ लिनक्स के लिए निष्पादनयोग्य का उत्पादन करने और लॉन्च 4j का उपयोग करने के लिए : http://launch4j.sourceforge.net/ विंडोज़ निष्पादन योग्य का उत्पादन करने के लिए। लिनक्स पर पैकेज करने के लिए आप किसी भी आरपीएम या डेब पैकगर का उपयोग कर सकते हैं। Win32 के लिए http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System प्रयास करें


3

यदि यह एक वास्तविक GUI- युक्त अंतिम उपयोगकर्ता अनुप्रयोग है, तो आपको उस lanaguage को अनदेखा करना चाहिए जिसमें आपने प्रोग्राम (जावा) लिखा था और अपने प्रत्येक चुने हुए प्लेटफार्मों के लिए एक देशी इंस्टॉलर का उपयोग करें। मैक लोग एक .dmg चाहते हैं और विंडोज़ पर .msi या a .exe इंस्टॉलर जाने का रास्ता है। विंडोज पर मैं NullSoft से NSIS को केवल इसलिए पसंद करता हूं क्योंकि यह InstallShield या InstallAnywhere की तुलना में कम आपत्तिजनक है। OSX पर आप वहां पहले से मौजूद JVM पर भरोसा कर सकते हैं। विंडोज पर आपको आवश्यकता पड़ने पर उनके लिए इसे जांचना और इंस्टॉल करना होगा। लिनक्स लोग जावा GUI एप्लिकेशन नहीं चलाएंगे, और कुछ ही, जो एक निष्पादन योग्य .jar के साथ क्या करना है, जानते हैं।


3
वास्तव में? linux लोग gui एप्लीकेशन नहीं चलाएंगे? तब मुझे लगता है कि उनका कार्यक्रम उनके लिए बेकार है जो पूरी चर्चा को प्रस्तुत करते हैं।
मैट

@ मैट आप मूल एप्लिकेशन को GUI अनुप्रयोग क्यों मान रहे हैं? मैंने लिनक्स पर कई कमांड लाइन जावा एप्लिकेशन इंस्टॉल किए हैं, और जो .deb या .rp के रूप में नीचे आते हैं, वे विशेष रूप से सराहे जाते हैं।
Ry4an Brase

1
मूल शीर्षक जीयूआई ने कहा। इसके अलावा, अगर वेबस्टार्ट को लाया गया है, तो यह एक अच्छी शर्त है कि यह एक गुई एप्लिकेशन है। अंत में, यह कहना कि linux उपयोगकर्ता GUI अनुप्रयोगों का उपयोग नहीं करते हैं, पूरी तरह से असत्य है।
मैट

मैंने यह नहीं कहा कि लिनक्स लोग GUI एप्लिकेशन नहीं चलाते हैं। मैंने कहा कि वे "जावा GUI" एप्लिकेशन नहीं चलाएंगे, और नेटबीन्स और एक्लिप्स के बाहर (जो मैंने "कुछ इच्छाशक्ति के तहत कवर किया था, एक निष्पादन योग्य जार के साथ क्या करना है") मैं एक व्यापक रूप से इस्तेमाल के बारे में नहीं सोच सकता लिनक्स (ओपन ऑफिस, आदि) पर जावा एप्लिकेशन सी ++ हैं और केवल प्लगइन्स के लिए जावा का उपयोग करें)।
Ry4an Brase

SQLDeveloper के बारे में कभी सुना है? या ओरेकल प्रबंधन उपकरण में से कोई भी? जावा में सभी कोडित (हालांकि sqldeveloper समाप्त होता है एक। Exe के रूप में बंडल किया जा रहा है, लेकिन यह जावा है)
मैट

3

हालाँकि मैंने खुद NSIS (Nullsoft Scriptable Installer System) का उपयोग नहीं किया है , लेकिन ऐसी स्क्रिप्ट्स हैं जो यह जाँच करेंगी कि आवश्यक JRE लक्ष्य प्रणाली पर स्थापित है या नहीं।

कई नमूना स्क्रिप्ट कोड उदाहरणों और वास्तविक विश्व इंस्टॉलर्स पृष्ठों से उपलब्ध हैं, जैसे:

(कृपया ध्यान दें कि मैंने वास्तव में किसी भी स्क्रिप्ट का उपयोग नहीं किया है, इसलिए कृपया इसे एक समर्थन के रूप में न लें।)


2

मुझे अपनी परियोजना और उसकी निर्भरता को एक जार फ़ाइल में पैकेज करने के लिए एक तरीके की आवश्यकता थी।

मैंने पाया कि मुझे Maven2 असेंबली प्लगइन का उपयोग करने की आवश्यकता है: Maven2 असेंबली प्लगइन

यह एक-जार की कार्यक्षमता को डुप्लिकेट करने के लिए प्रकट होता है , लेकिन इसे प्राप्त करने के लिए कोई अतिरिक्त कॉन्फ़िगरेशन की आवश्यकता नहीं होती है।


1

सरल जावा ऐप के लिए मुझे जार का उपयोग करना पसंद है। एक फ़ाइल को वितरित करना बहुत सरल है जिसे एक उपयोगकर्ता बस (विंडोज़) पर क्लिक कर सकता है, या

java -jar jarname.jar

IMHO, जार जाने का रास्ता है जब सादगी एक मुख्य आवश्यकता है।


इस newbies पर प्रयास करें और आप पाएंगे कि यह अच्छी तरह से काम नहीं करेगा।
रागिनी

1

मैं ग्रहण आरसीपी अनुप्रयोगों को विकसित करता हूं। आम तौर पर एक ग्रहण आवेदन शुरू करने के लिए एक निष्पादन योग्य लांचर शामिल है। मैं java वर्चुअल मशीन को एप्लिकेशन फ़ोल्डर के अंदर / jre उप निर्देशिका में शामिल करता हूं ताकि यह सुनिश्चित हो सके कि सही जावा संस्करण का उपयोग किया जाएगा।

फिर हम उपयोगकर्ता की मशीन पर स्थापना के लिए इनो सेटअप के साथ पैकेज करते हैं।


1

जावा एप्लिकेशन को वितरित करने का सबसे अच्छा तरीका क्या है? क्या होगा यदि जावा एप्लिकेशन को उपयोगकर्ता के कंप्यूटर पर कलाकृतियों को स्थापित करने की आवश्यकता है? क्या कोई अच्छा जावा इंस्टॉलेशन / पैकेजिंग सिस्टम है?

मेरे अनुभव में ( कई विकल्पों का मूल्यांकन करने से ), install4j एक अच्छा समाधान है। यह किसी भी प्लेटफ़ॉर्म के लिए देशी इंस्टालर बनाता है, और विशेष रूप से जावा ऐप इंस्टॉल करने के लिए तैयार है। विवरण के लिए, इसकी वेबसाइट पर " सुविधाएँ " देखें ।

install4j एक वाणिज्यिक उपकरण है, हालांकि। खासकर यदि आपकी ज़रूरतें अपेक्षाकृत सरल हैं (बस एक एप्लिकेशन वितरित करें और कुछ कलाकृतियों को स्थापित करें), कई अन्य अच्छे विकल्प मौजूद हैं, जिनमें मुफ्त वाले (जैसे izPack या पहले से उल्लेखित Lauch4j ) शामिल हैं। लेकिन आपने सबसे अच्छा तरीका पूछा , और मेरे वर्तमान ज्ञान के लिए install4j एक है, विशेष रूप से बड़े या अधिक जटिल जावा (ईई) एप्लिकेशन को वितरित करने के लिए।


क्या आप जानते हैं कि मैक ओएस पर जेवीएम 5.0 को चलाने के लिए इसे कैसे मजबूर किया जाए? विंडोज़ के साथ आप सिर्फ JRE को बंडल करते हैं, लेकिन मैक पर यह संभव है कि उनके पास एक और डिफ़ॉल्ट JVM कॉन्फ़िगर किया गया हो। तो मुझे यकीन नहीं है कि आप इसे स्पष्ट रूप से विशिष्ट जेवीएम संस्करण का उपयोग करने के लिए कैसे मजबूर कर सकते हैं ...
स्टीफन ग्रेनियर

@ स्टेफ़ेन, मैंने वास्तव में इंस्टॉल 4 जे का उपयोग करके ओएस एक्स इंस्टॉलर्स नहीं बनाया है, लेकिन मुझे लगता है कि यह एक समस्या नहीं होनी चाहिए जो लचीली जेआरई बंडलिंग / डिटेक्शन विकल्पों में है। उनके बारे में अधिक जानकारी के लिए, इस उत्तर के लिंक की जाँच करें: stackoverflow.com/questions/995881/…
जोनिक जूल

चूंकि मैक जावा ऐप बंडलों को बनाने का समर्थन करता है, इसलिए आप केवल जानकारी में JRE निर्दिष्ट कर सकते हैं। ऐसा करें ... <key> JVMVersion </ key> <string> 1.5 + </ string> आप विशिष्ट संस्करण की आवश्यकता के लिए प्लस निकाल सकते हैं । यह है कि मैं इसे कैसे करता हूं, लेकिन मैं install4j का उपयोग नहीं करता हूं। वेब पर मैक एप बड्स बनाने वाले पृष्ठों का एक समूह है। मैं भी सिर्फ यह देखने की सलाह देता हूं कि यह कैसे लाइमवायर या वुज़ (जावा ऐप) करता है। तुम भी निर्माण स्क्रिप्ट को देख सकते हैं कि वे ऐप बंडल बनाने के लिए उपयोग करते हैं और डीजीएम फ़ाइलें खोलते हैं क्योंकि वे खुले स्रोत हैं!
कैल

0

सबसे अच्छा जवाब प्लेटफॉर्म पर निर्भर करता है। विंडोज पर तैनाती के लिए, मेरे पास वन-जार और लॉन्च 4 जे के संयोजन का उपयोग करके अच्छे परिणाम हैं । मेरे बिल्ड वातावरण को ठीक से सेट करने में थोड़ा समय लगा (चींटी स्क्रिप्ट्स, ज्यादातर) लेकिन अब यह काफी दर्द रहित है।


0

खैर देखने की मेरी बात से बेहतर वितरण तंत्र की तरह कुछ का उपयोग करना है ClickOnce , या WebStart प्रौद्योगिकी। आप बस संस्करण को सर्वर पर तैनात करते हैं और संस्करण के जारी होने पर यह अपने आप ही ग्राहकों के पास पहुँच जाता है। इसके अलावा एक्लिप्स आरसीपी प्लेटफॉर्म में अपडेट मैनजर शामिल है जो वेबस्टार्ट करता है, लेकिन यह भी बहुत अधिक है।

चूंकि मैं भवन के लिए Maven2 का उपयोग कर रहा हूं, परिनियोजन सिर्फ केक का एक टुकड़ा है: निर्मित जार को सर्वर पर स्थान पर कॉपी करें, जरूरत पड़ने पर jnlp फ़ाइल को अपडेट करें और आप कर रहे हैं।


0

installanywhere अच्छा है, लेकिन महंगा है - मुझे अच्छा (मुफ्त) एक नहीं मिला है


कुछ मुफ्त वाले (साथ ही साथ वाणिज्यिक जो कि बहुत अधिक उचित कीमत वाले हैं) सहित InstallAnywhere विकल्पों के लिए इसे देखें: stackoverflow.com/questions/759855/…
जोनिक

-2

मैं jar फ़ाइल को अन्य निर्भर जार, कॉन्फ़िगरेशन फ़ाइलों और प्रलेखन के साथ-साथ एक run.bat / run.sh के साथ ज़िप करूंगा। अंतिम उपयोगकर्ता को किसी भी स्थान पर इसे अनज़िप करने में सक्षम होना चाहिए और यदि आवश्यक हो तो रन को संपादित करें। (यह अधिकांश मामलों में संपादन के बिना चलना चाहिए)। यदि आप स्टार्ट मेनू, डेस्कटॉप, सिस्टम ट्रे आदि में प्रविष्टियाँ बनाना चाहते हैं तो एक इंस्टॉलर उपयोगी हो सकता है।

एक उपयोगकर्ता के रूप में मैं अनज़िप पसंद करता हूं और इंस्टॉलेशन के प्रकार (नो स्टार्ट मेनू एंट्रीज़ प्लीज) चलाता हूं। हालाँकि IT उद्योग से बाहर के लोगों की अलग-अलग प्राथमिकताएँ हो सकती हैं। इसलिए यदि एप्लिकेशन डेवलपर्स zip-run.bat रूट के लिए बड़े पैमाने पर लक्षित है और एक इंस्टॉलर का उपयोग करके आम जनता के लिए एप्लिकेशन इंस्टॉल किए जा सकते हैं।


यह कभी भी newbies के लिए काम नहीं करेगा।
रागिनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.