कुछ मामलों में एक कार्यक्रम को अलग-अलग तरीकों से चलाया जा सकता है और इसे कैसे कहा जाता है, इस पर अलग-अलग व्यवहार प्रदर्शित करते हैं। यदि आप कॉल vimकरते हैं vi, तो यह संगतता मोड में चलता है। कभी-कभी यह कई संबंधित कार्यक्रमों के एक संस्करण को बनाए रखने की कोशिश करता है - उदाहरण के लिए mailqऔर newaliasesकई यूनिक्स सिस्टम पर एक कड़ी है sendmailताकि ये कार्यक्रम सिंक में रहें)
जावा प्रोग्राम आम तौर पर इस प्रकार लागू होते हैं:
% जव -जर। foo.jar args
% जव फउ आगर
पहला संस्करण वह है जहां आपके पास एक मेनिफेस्ट फ़ाइल है जो मुख्य वर्ग को इंगित करती है, दूसरा संस्करण Fooवर्ग पथ में पाए गए वर्ग में मुख्य विधि को चलाता है ।
जावा के लिए प्रस्तुत की गई जानकारी या तो जार के लिए एक रास्ता है या वर्ग का नाम है।
जार का स्थान इतना महत्वपूर्ण नहीं है कि वह कोड से कुछ हो (और वास्तव में मूल कल्पना का हिस्सा नहीं था)। एक जार को वास्तव में कुछ भी नाम दिया जा सकता है, और अक्सर संस्करण संख्याएं शामिल होती हैं। और अधिक, कोई गारंटी नहीं है कि वर्ग को .jar में भी संग्रहीत किया गया था (इसे निकाला जा सकता था)।
जावा एप्लिकेशन के साथ -jarइसे दर्ज करने का केवल एक ही तरीका है - मैनिफेस्ट में परिभाषित वर्ग। कोई नाम नहीं है जो किया जा सकता है।
अन्य नाम, वर्ग नाम के साथ इसे लागू करने के लिए सीधे निष्पादन इकाई को इंगित करता है। Furthemore, इसे गुणा नहीं किया Bar.classजा सकता है - आप class Fooइसके लिए कोड नहीं हो सकते हैं बस इस तरह से काम नहीं करता है।
इससे पता चलता है कि वास्तव argv[0]में जावा एप्लिकेशन के लिए C अर्थ की जानकारी को पास करने का कोई मतलब नहीं है - इसका या तो javaअर्थहीन और मनमाना होना है, या उस वर्ग का नाम है जिसे आमंत्रित किया जा रहा है (जो आप पहले से ही कोड निष्पादित कर रहे हैं (आप कुछ कर सकते हैं जैसे getClass().getEnclosingClass().getName()कि आप हताश थे ...))।
यहाँ एक बिंदु है, आप एक .jar या वर्ग पथ पर कक्षाओं में कई मुख्य तरीकों को परिभाषित कर सकते हैं। और आप उन्हें अलग तरह से व्यवहार कर सकते हैं जैसे कि क्या बयानों की एक श्रृंखला argv[0]थी जो कि क्या था के आधार पर थी।
मेरे पास अतीत में कोड एंकिन है java -cp Foo.jar com.me.foo.Testजिसमें Testमैनिफेस्ट में परिभाषित एक के बजाय कक्षा की मुख्य विधि को लागू किया गया था।
foo.exe।