java - ओएसजीआई बंडल से कमांड लाइन आर्गिजेंस तक पहुंच




command-line osgi (3)

उत्तर में देर हो, लेकिन शायद किसी को यह उपयोगी लगता है।

मेरे पास एक ही समस्या थी मेरा एप्लीकेशन ओएसजीआई में चलता है लेकिन मेरे पास बाह्य इंटरफेस हैं जिनके साथ मैं अनुपालन करने की आवश्यकता है जिसका अर्थ है कमांड लाइन तर्क पढ़ना।

इस की कुंजी कुछ ओएसजीआई विनिर्देश 4.2 में परिभाषित की गई है, अर्थात् फ्रेमवर्क लॉन्चिंग। आप इसके बारे में लाइफ साइकल लेयर सेक्शन में ड्राफ्ट स्पेक में (www.osgi.org पर ड्राफ्ट के नीचे पाया) पढ़ सकते हैं।

यह ओएसजीआई फ्रेमवर्क (ओजीआईजी 4.2 का समर्थन करने वाला कोई भी कार्यान्वयन) एक स्टैंड-अलोन जावा एप्लिकेशन से लॉन्च करने का एक मानक तरीका है। निफ्टी बात यह है कि आपको यह पता करने की आवश्यकता नहीं है कि आप किस कार्यान्वयन शुरू करते हैं (फेलिक्स, इक्विनॉक्स, ...) जब तक यह CLASSPATH में पाया जाता है

इस तरह, आपका लांचर एप्लिकेशन कमांड लाइन तर्कों को तत्काल पढ़ता है, ओएसजीआई फ्रेमवर्क शुरू करता है और तर्क को अपने बंडल में (किसी भी तरह से आप चाहते हैं) को पारित करता है। लांचर आवेदन में आपको जो मिलता है वह रूपरेखा का एक संदर्भ है, जिससे आप अपने बंडलों के साथ संवाद कर सकते हैं।

इक्विनॉक्स 3.5 एम 6 के रूप में (मुझे लगता है, कम से कम एम 6) यह समर्थित है। अपाचे फेलिक्स का नवीनतम संस्करण भी इसका समर्थन करता है।

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

केवल एक चीज जो आवरण सचमुच करता है, ओएसजीआई फ्रेमवर्क में कमांड लाइन के तर्कों को पारित कर रहा है, ताकि एक बंडल उन पर प्रतिक्रिया कर सके। ध्यान दें कि यह वास्तव में तर्कों को पार्स नहीं करता है, बस स्ट्रिंग को मेरे आवेदन में धक्का देता है I

क्या बंडल से कमांड लाइन पैरामीटर तक पहुंचने के लिए कोई मानक तरीका (या कम से कम एक फ़ेलिक्स-मानक तरीका) है, ताकि मैं कस्टम लॉन्चर से दूर कर सकूं?


मुझे पता है कि आप फ़ेलिक्स की खोज केवल उसके बाद, यह इक्विनॉक्स केवल समाधान उपयोगी नहीं हो सकता है मैं इसे यहाँ छोड़ देता हूं, क्योंकि कोई और इस प्रश्न पर ठोकर खा सकता है और इक्विनॉक्स चल रहा है।

किसी भी बंडल और किसी भी रूपरेखा से, यह मुश्किल हो सकता है यदि आप org.eclipse.core.runtime.applications एक्सटेंशन बिंदु का उपयोग करते हैं, तो यह आसान होना चाहिए। Precondition: आप पैरामीटर के रूप में पास-कंसोल नहीं करते हैं

public class Application implements IApplication {

    @Override
    public Object start(IApplicationContext context) throws Exception {
        String[] args = (String[])context.getArguments().get("application.args");
        // args.length == 0 if no arguments have been passed
    }
}

Plugin.xml में संदर्भ

 <plugin>
    <extension
          id="myApp"
          point="org.eclipse.core.runtime.applications">
        <application>
          <run class="package.Application" />
        </application>  
    </extension>
 </plugin>

शायद ऩही। मुझे लगता है कि मानक फेलिक्स लांचर कुछ कमांड लाइन सत्यापन करता है और केवल एक तर्क के रूप में बंडल कैश दिर को स्वीकार करता है। एक से अधिक तर्क और लांचर निकल जाता है।

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





apache-felix