2010-05-15 15 views
8

मैंने पाया कि विंडोज़ में बहुत सारे जावा प्रोग्राम प्रोग्राम लॉन्चर के रूप में .bat बैच फ़ाइल का उपयोग करते हैं। यदि एक्सेल निष्पादन योग्य फ़ाइल का उपयोग करने वाले अन्य प्रोग्रामों की तुलना में यह अजीब लग रहा है।जावा प्रोग्राम प्रोग्राम लॉन्चर के रूप में .bat फ़ाइल का उपयोग क्यों करते हैं?

उन जावा प्रोग्राम .exe फ़ाइल का उपयोग क्यों नहीं कर सकते हैं? क्या यह जावा प्रोग्राम की सीमा है?

धन्यवाद।

+0

जावा प्रोग्राम को एक .exe फ़ाइल में संकलित करने से आपको रोक नहीं रहा है। भाषा के विनिर्देशन में कुछ भी नहीं कहता है कि आपको इसे .exe में संकलित करने की अनुमति नहीं है। – Cam

उत्तर

12

यह सिर्फ एक .bat फ़ाइल बनाने और उस में java -jar <archive-path> शामिल करने के लिए बहुत आसान है और आप इसे चल रहा है। आप आसानी से .bat फ़ाइल को संपादित कर सकते हैं और इसे और अधिक कॉन्फ़िगर कर सकते हैं। आपको केवल नोटपैड की ज़रूरत है।

यह भी उदाहरण के लिए लिनक्स के लिए बैश स्क्रिप्ट फ़ाइलें की तरह काफी लग रहा है। यह निष्पादन के लिए .bat फ़ाइल बनाता है जो एक .jar में आसानी से Win से Linux तक स्थानांतरित हो जाता है।

जबकि एक exe फ़ाइल को आसानी से परिवर्तनीय नहीं है (यदि सभी) और यह कुछ मेटा डेटा, जिसके परिणामस्वरूप .exe बड़ा है ... EXE भी एक Windows विशिष्ट फ़ाइल एक्सटेंशन है ... पैदा करता

बेशक, यदि आप सब कुछ एक ही फाइल में पैक करना चाहते हैं और उपयोगकर्ता को .jar फ़ाइल को हटाने के बारे में चिंता नहीं है लेकिन अभी भी बल्लेबाजी कर रहा है ... यह एक और मामला है।

9

बैच फ़ाइल अक्सर "जावा -जर" निष्पादित करती है और इसके अतिरिक्त जेवीएम पैरामीटर जोड़ती है - इसे जार फ़ाइल में जोड़ा नहीं जा सकता है।

अपनी तेजी से बल्ले फ़ाइल लिखने में से जावा संग्रह लपेट फ़ाइल exe करने के लिए - यह भी उन उपकरणों अक्सर वाणिज्यिक कर रहे हैं या अच्छी तरह से काम नहीं करते ...

, वहाँ नहीं कई देशी खिड़कियों निष्पादनयोग्य हैं (.exe) किया जावा में (हालांकि, यह अभी भी संभव है - वीज़, लिमवायर इत्यादि)

+0

"देशी" जावा प्रोग्राम के लिए आप पीई निष्पादन योग्य को संदर्भित करते हैं जो JVM (आमतौर पर एक डीएलएल में) शुरू करने से थोड़ा अधिक करता है और एक जार फ़ाइल लॉन्च करता है - बैच फ़ाइल की एक ही चीज़, बस थोड़ी अधिक छिपी हुई है। आप एक कदम आगे जा सकते हैं और जार को निष्पादन योग्य में एम्बेड कर सकते हैं लेकिन मुझे संदेह है कि अक्सर ऐसा किया जाता है। – Joey

+0

हाँ - लेकिन सवाल जावा कार्यक्रमों को वितरित करने का तरीका नहीं था, लेकिन बैच फाइलें क्या करती हैं ... – Xorty

4

जावा .exe पर संकलित नहीं है। यह एक आभासी मशीन, जेवीएम के लिए संकलित करता है। यह जावा प्लेटफार्म प्रौद्योगिकी का मौलिक पहलू है।

.bat अनिवार्य रूप से विंडोज के लिए एक शेल स्क्रिप्ट है। यह .exe निष्पादित करता है, उदा। जेआरई से java.exe जो तब बाइटकोड संकलित जावा कोड चलाते हैं।

+7

.NET CIL भी मूल कोड नहीं है, फिर भी एक सामान्य पीई फ़ाइल में रहता है। ऐसा नहीं है कि जावा ऐसा नहीं कर सका, यह सिर्फ इतना है कि डिजाइनरों ने ऐसा नहीं किया। – Joey

-1

अच्छा सवाल। मैंने यह भी सोचा कि क्यों सूर्य ने कभी भी कुछ टूल प्रदान नहीं किया है जो एक .exe उत्पन्न करता है।

एक exe-file बैट-फ़ाइल से अधिक उपयोगकर्ता के अनुकूल है। यह एक अच्छा आइकन आदि है।

मैं एक बार कुछ अपने आप को लिखा था: http://www.bitstorm.org/jarx/

+0

नहीं, उपयोगकर्ता अनुकूलता के मामले में, उपयोगकर्ता यह भी नहीं देखता कि यह किस प्रकार की फ़ाइल है, वह सिर्फ शॉर्टकट पर क्लिक करता है। –

+0

जावा को जेएआर में बनाया जा सकता है, जो जेवीएम पर समान है क्योंकि EXE जीत पर है। – Cipi

0

एक बैच फ़ाइल आवश्यक classpath आदि के साथ JVM लोड और एक जार या एक जार में वर्ग या वर्ग को चलाने के लिए यह बता सकते हैं। JVM लॉन्च करने के लिए एक या दो कमांड जारी करने के लिए निष्पादन योग्य पीई छवि बनाने के लिए यह अधिक कठिन और अधिक काम है और इसे एक जार खोलने के लिए कहें।

0

अच्छा ... अगर आप निष्पादित करना चाहते हैं तो आपको बैच फ़ाइल का उपयोग करना होगा। उदाहरण के लिए फ़ाइल। आप बैच का उपयोग करना चाहते हैं क्योंकि आपको जावा जावा वर्चुअल मशीन (एक प्रोग्राम भी) में अपना जावा प्रोग्राम यूआरआई पास करना होगा ताकि यह इसे निष्पादित कर सके।

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

नेटबीन में ऐसा करने के लिए, बिल्ड कमांड निष्पादित करें, और अपने प्रोजेक्ट फ़ोल्डर में फ़ोल्डर को ढूंढें, और वहां आप एक जावा निष्पादन योग्य देखेंगे।

Exe, या कोई exe, कार्यक्षमता उपयोगकर्ता के नजरिए से ही है, तो यह मीटर नहीं है ...

एक नोट

जावा कार्यक्रमों मंच स्वतंत्र हैं, विभिन्न प्लेटफार्मों प्रक्रिया पर तो निष्पादन का अलग-अलग हो सकता है। यदि जावा केवल विंडोज के लिए होगा, तो मुझे यकीन है कि सूर्य इसे विंडोज एक्सई के लिए संकलित करेगा।

-1

आप कर सकते हैं, बहु मंच स्थापना संलेखन उपकरण आपके लिए एक बना सकता है। उदाहरण के लिए, InstallAnywhere, यह आपके लिए जावा एप्लिकेशन के लिए एक विंडो निष्पादन योग्य बनाएगा।

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

निष्पादन पर वापस, जावा मॉडल एक बार लिखने, कई चलाने के लिए, जब सूर्य एक लांचर प्रदान करने के लिए तय है, वे सब मंच के लिए यह प्रदान करना होगा। उदाहरण के लिए, विंडोज़ जेडीके को विंडोज़ x86, ia64, amd64, लिनक्स/यूनिक्स के लिए लॉन्चर प्रदान करने की आवश्यकता होगी, क्योंकि वे सभी लॉन्चर साझा कर सकते हैं क्योंकि वे सभी शेयर शैल स्क्रिप्ट का उपयोग करते हैं। फिर सवाल यह है कि क्या सूर्य मैक के लिए एक पैकर दिखाता है? यह बस फिट नहीं है, आपको निश्चित रूप से installanywhere और install4j जैसे टूल में देखना चाहिए, उनमें सभी जावा लॉन्चर्स शामिल हैं।

+0

डेस्कटॉप ऐप वितरित करने का मानक तरीका जावा वेब स्टार्ट का उपयोग करना है। और सूर्य के बारे में दावा है कि चीजों को अच्छी तरह से काम नहीं करना बहुत विवादास्पद है। जावा मेरे लिए अच्छा काम करता है। –

+0

सूर्य सबसे निश्चित रूप से * नहीं * 80/20 नियम का पालन करने वाली कंपनी थी। आपको सूर्य के इतिहास के बारे में ज्यादा जानकारी नहीं है। –

0

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

-3

आप बहुत जल्दी है कि सिर्फ एक .bat फ़ाइल की तुलना में अधिक पेशेवर लगेगा एक कस्टम आइकन के साथ एक exe बनाने के लिए autoit उपयोग कर सकते हैं।

0

जावा कार्यक्रमों जमीन से डिजाइन किया गया ओएस द्वारा लेकिन एक आभासी मशीन द्वारा नहीं चलाया जा करने के लिए कर रहे थे। जब आप "जावा प्रोग्राम चलाते हैं" तो आप वास्तव में वर्चुअल मशीन शुरू कर रहे हैं और इसे अपने प्रोग्राम को लोड करने के लिए कह रहे हैं।

यह ठीक है कि यह कैसे डिज़ाइन किया गया था। ऐसा नहीं है कि वे गुणवत्ता विभाग में कमी कर रहे थे (एक उत्तर दिया गया सुझाव सूर्य केवल 80% पूरा होने के लिए उत्पाद प्राप्त करता है), यह एक सचेत निर्णय था। और क्योंकि बैच फ़ाइल, शॉर्टकट, शेल स्क्रिप्ट या निष्पादन योग्य बनाने के लिए यह बेहद तुच्छ है जो एक-क्लिक लॉन्चर प्रदान करेगा, जावा प्रोग्राम को एकल-क्लिक .exe में कनवर्ट करने की क्षमता जोड़ने की आवश्यकता नहीं थी (इसमें खिड़कियों का मामला)।

2

वास्तव में, काफी Java अनुप्रयोगों बैच स्क्रिप्ट के बजाय उपयोग देशी लांचर कर का एक बहुत: Eclipse, NetBeans, IntelliJ IDEA, JRuby और Vuze उदाहरण के केवल कुछ ही रहे हैं।

मुख्य कारण लोगों अधिक बार ऐसा नहीं करते हैं, कि सी में एक JVM embedding वास्तव में कुछ हद तक मुश्किल है और अगर आप एक बैच स्क्रिप्ट से शुरू करने के साथ भाग प्राप्त कर सकते हैं, तो क्यों परेशान है?

0

मेरे दो कारण हैं:

  1. कई संस्थापक बिल्डरों जब तक आप किसी भी तरह संस्थापक एक कार्यक्रम लक्षित मशीन पर मौजूदा रूप में java स्वीकार करने के लिए कॉन्फ़िगर एक कार्यक्रम मेनू उदाहरण java -jar whatever.jar के लिए युक्त शॉर्टकट बनाने की अनुमति नहीं है। वितरण में शामिल बीएटी फ़ाइल में शॉर्टकट बनाने के दौरान यह मुश्किल या असंभव हो सकता है।
  2. जैसा कि अन्य लोगों ने बताया है: होस्ट मशीन कॉन्फ़िगरेशन के आधार पर JVM स्टार्टअप पैरामीटर जोड़ने की आवश्यकता है।
संबंधित मुद्दे