2011-09-08 15 views
46

एकाधिक-डी कथन होने के बजाय जावा प्रोग्राम में कमांड लाइन पर एकाधिक सिस्टम गुण निर्दिष्ट करने का कोई आसान तरीका है?एकाधिक सिस्टम गुणों को सेट करें जावा कमांड लाइन

इससे बचने की कोशिश कर रहा:

java -jar -DNAME="myName" -DVERSION="1.0" -DLOCATION="home" program.jar 

मैंने सोचा कि मैं किसी एक -D का उपयोग कर और उसके बाद कुछ उद्धृत स्ट्रिंग का एक उदाहरण देखा था, लेकिन मैं उदाहरण फिर से नहीं मिल रहा।

उत्तर

37

उत्तर नहीं है। आप एक उदाहरण है जहां किसी तरह कुछ सेट है | देखा हो सकता है:

-DArguments=a=1,b=2,c=3,d=4,e=cow

फिर आवेदन Arguments संपत्ति स्ट्रिंग के मान पार्स व्यक्तिगत मूल्यों को प्राप्त करने के लिए होगा। में अपने main आप के रूप में (यह मानते हुए इनपुट प्रारूप की गारंटी है) कुंजी मान प्राप्त कर सकते हैं:

String line = System.getProperty("Arguments"); 
if(line != null) { 
    String str[] = line.split(","); 
    for(int i=1;i<str.length;i++){ 
     String arr[] = str[i].split("="); 
     System.out.println("Key = " + arr[0]); 
     System.out.println("Value = " + arr[1]); 
    } 
} 

इसके अलावा, -D मुख्य वर्ग या जावा कमांड लाइन में jar फ़ाइल से पहले किया जाना चाहिए। उदाहरण: java -DArguments=a=1,b=2,c=3,d=4,e=cow MainClass

10

Documentation पर कुछ भी नहीं है जो इस तरह के बारे में कुछ भी बताता है।

-Dproperty = मूल्य एक प्रणाली संपत्ति के मूल्य निर्धारित करें:

यहाँ एक उद्धरण है। यदि मान एक स्ट्रिंग है रिक्ति है, तो आप दोहरे उद्धरण में स्ट्रिंग संलग्न करना होगा:

जावा -Dfoo = "कुछ स्ट्रिंग" SomeClass

+0

क्या वर्ग करता है 'SomeClass' लिए बात कर रहा है? मैं स्प्रिंग, स्ट्रूट्स और टॉमकैट 8.5 का उपयोग करके 'प्रॉपर्टीज' फ़ाइल को पढ़ने के लिए इस प्रॉपर्टी को सेट करने की कोशिश कर रहा हूं, यह उस आदेश का एकमात्र हिस्सा है जो अभी भी मेरे लिए अस्पष्ट है – Frakcool

+0

@ फ्रैकोकोल 'कुछ क्लास' मुख्य के साथ कक्षा होगी जिस विधि को आप चलाने की कोशिश कर रहे हैं। आम तौर पर इसमें एक पैकेज घोषणा होगी और आपको इसे चलाने के लिए पूरी तरह से योग्य वर्ग नाम का उपयोग करना चाहिए। – adarshr

+0

ओह मुझे यह मिल गया, यह वही था जो मैं सोच रहा था, हालांकि एक वेब अनुप्रयोग में कोई 'मुख्य' विधि नहीं है, इसलिए, मुझे लगता है कि यह टोमकैट के गुणों में किया गया है, क्या मैं सही हूँ? – Frakcool

13

इसके बजाय एक तर्क के रूप गुण पास करने का है, तो आप उपयोग कर सकते हैं उन्हें स्टोर करने के लिए एक .properties।

+5

+1: आप उन्हें सिस्टम सिस्टम में' System.getProperties() लोड (नया) के साथ भी लोड कर सकते हैं। FileInputStream ("my.properties")) 'हालांकि आपकी खुद की संपत्तियां बेहतर दृष्टिकोण होने की संभावना है। –

0

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

0

आप विकल्प सेट करने के लिए JAVA_TOOL_OPTIONS पर्यावरण चर का उपयोग करने में सक्षम हो सकते हैं। यह रेशियन के साथ मेरे लिए काम किया। Environment Variables and System Properties जो इस में क्या कहना है देखें:

कई वातावरण में, कमांड लाइन के लिए आसानी से सुलभ नहीं है आवश्यक आदेश-पंक्ति विकल्पों के साथ आवेदन शुरू करते हैं।

इस बार अनुप्रयोगों कि एम्बेडेड VMs का उपयोग करें (जिसका अर्थ है वे वीएम शुरू करने के लिए जावा मूल निवासी इंटरफ़ेस (JNI) प्रार्थना किए एपीआई का उपयोग), या जहां स्टार्टअप गहरा लिपियों में नीडिंत है के साथ होता है। इन वातावरण में JAVA_TOOL_OPTIONS पर्यावरण चर एक कमांड लाइन बढ़ाने के लिए उपयोगी उपयोगी हो सकता है।

जब ऐसा वातावरण चर सेट किया गया है, JNI_CreateJavaVM समारोह (JNI प्रार्थना किए एपीआई में), JNI_CreateJavaVM समारोह विकल्प अपने JavaVMInitArgs तर्क में आपूर्ति करने के लिए वातावरण चर की मूल्य कहते हैं।

हालांकि सुरक्षा कारणों से इस पर्यावरण परिवर्तनीय उपयोग को अक्षम किया जा सकता है।

कुछ मामलों में, यह विकल्प सुरक्षा कारणों से अक्षम है। उदाहरण के लिए, ओरेकल सोलारिस ऑपरेटिंग सिस्टम पर, यह विकल्प अक्षम है जब प्रभावी उपयोगकर्ता या समूह आईडी वास्तविक आईडी से भिन्न होता है।

इस उदाहरण को JAVA_TOOL_OPTIONS पर्यावरण चर का उपयोग कर कमांड लाइन पर निर्दिष्ट करने के बीच अंतर दिखाते हुए देखें।

screenshot showing use of JAVA_TOOL_OPTIONS environment variable

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