2017-06-25 10 views
10

हमें -D उदा। के साथ JVM तर्कों को उपसर्ग करने की आवश्यकता क्यों है कमांड लाइन से एक जार चलाते समय? जैसेजेवीएम तर्क "-D" के साथ क्यों शुरू होते हैं?

java -jar -DmyProp="Hello World" myProgram.jar 

प्रणाली पैरामीटर myProp साथ myProgram.jar को चलाने के लिए प्रयोग किया जाता है। तो अग्रणी -D क्यों? क्यों नहीं कर सका आर्किटेक्ट जावा की हमें बस कार्य करें:

java -jar -myProp="Hello World" myProgram.jar 

मैं सिर्फ "क्योंकि है कि जिस तरह से यह है" से परे एक जवाब के लिए उम्मीद कर रहा हूँ।

बोनस प्रश्न: पत्र किसी अन्य पत्र के विपरीत -D क्यों है, क्या यह किसी भी चीज़ के लिए खड़ा है?

+0

ओरेकल/सन डेवलपर्स के लिए यह एक अच्छा सवाल है। बीटीडब्ल्यू, यह आपके लिए एक मुद्दा क्यों है? – BackSlash

+2

@ बैकस्लाश मैं समझना चाहता हूं कि वे "क्यों काम करते हैं" केवल "काम करने के लिए"। –

+0

सभी महान उत्तरों; दुर्भाग्य से मैं केवल एक स्वीकार कर सकता हूं। ज्ञान के लिए धन्यवाद दोस्तों! –

उत्तर

12

"परिभाषित करें": -D उपसर्ग के साथ आप एक तरह से करने के लिए मिलता है। अर्थ सी में एक प्रीप्रोसेसर परिभाषा के समान है। -D यह दर्शाता है कि परिभाषा अनुप्रयोग के संदर्भ में है, न कि जावा दुभाषिया संदर्भ में निष्पादन योग्य नाम से पहले किसी भी अन्य विकल्प की तरह।

पत्र 'डी' विशेष रूप से the documentation में नहीं समझाया गया है के उपयोग, लेकिन केवल प्रयोग "को परिभाषित करने के लिए" प्रणाली गुण में एक महत्वपूर्ण नक्शा है - इस संदर्भ के लिए छोड़कर:

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

+0

क्या आपके पास इसके बारे में प्रलेखन है? – user7294900

3

यदि आप -myProp = "XYZ" जैसी कुछ भी निर्दिष्ट नहीं करते हैं तो इसका अर्थ है कि यह प्रोग्राम की मुख्य विधि के लिए तर्क के रूप में पारित किया जाता है। परिवहन = dt_socket, सर्वर = y, निलंबित:

डी आप System.getProperty

का उपयोग कर इस मान का उपयोग कर सकते हैं

-X -Xdebug -Xnoagent -Djava.compiler = कोई नहीं -Xrunjdwp की तरह विस्तार तर्क के लिए प्रयोग किया जाता है इसका मतलब है = वाई, पता = 8000

हां, वे इंटरचेंज कर सकते थे .. पात्र; लेकिन इन वर्णों का उपयोग यह निर्दिष्ट करने के लिए किया जाता है कि किस प्रकार का पैरामीटर पारित किया गया है और उपभोक्ता कौन है।

+0

धन्यवाद, "एक्स" उपसर्ग मेरे दिमाग पर भी था। क्या आपको पता है कि "डी" और "एक्स" के अलावा अन्य कोई अन्य पत्र हैं जो विशेष प्रकार के तर्कों को उपसर्ग करने के लिए आरक्षित हैं? साथ ही, उपरोक्त में, मुझे लगता है कि आपके पास "एक्स" उपसर्ग के उदाहरण के तहत "Djava.compiler" है। क्या ये सही है? –

2

-D के बिना गुण सामान्य JVM विकल्पों के साथ संघर्ष करेंगे। उदाहरण के लिए आप संपत्ति jar कैसे सेट करेंगे?

-D शायद चुना गया था (मैं केवल इसके बारे में अनुमान लगा सकता हूं) क्योंकि इसका उपयोग सी प्रीप्रोसेसर में प्रतीकों को परिभाषित करने के लिए भी किया जाता है और इसलिए अधिकांश लोगों से परिचित था।

1

टकराव से बचने के लिए।

उदाहरण के लिए जावा आदेश -verbose तर्क ले सकता है:

java myClass -verbose 

मान लीजिए आप अपने ऐप शुरू कर रहा है स्थापित करने के लिए एक verbose आवेदन संपत्ति है।

रनटाइम पर इसे कैसे निर्दिष्ट करें यदि आपके पास जावा कमांड के verbose तर्क और verbose आपके आवेदन की संपत्ति को अलग करने का कोई तरीका नहीं है?

java myClass -verbose -Dverbose=false 
संबंधित मुद्दे