java दिन - प्रोग्रामेटिक रूप से ओएसजीआई(विषुव)शुरू करें?



और रात (4)

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

क्या यह संभव है? यदि हां, तो कैसे?

ऐसा लगता है जैसे पैक्स उपकरण ऐसा करेंगे, लेकिन मुझे ऐसा कोई दस्तावेज नहीं दिख रहा है। मुझे पता है कि मैं इस तरह विषुव शुरू कर सकता हूं:

BundleContext context = EclipseStarter.startup( ( new String[] { "-console" } ), null );

लेकिन मैं और अधिक करना चाहता हूं - जैसे मैंने कहा: अधिक बंडलों को लोड करें, शायद कुछ सेवाएं शुरू करें, इत्यादि।


Answers

संपादित करें: महसूस किया कि आप अंदर जावा से शुरू करना चाहते थे। पर्याप्त करीब पढ़ने के लिए मुझ पर शर्म आती है

इस लिंक को देखें। http://www.eclipsezone.com/eclipse/forums/t93976.rhtml

अनिवार्य रूप से

public static void main(String args[]) throws Exception {
  String[] equinoxArgs = {"-console","1234","-noExit"};
  BundleContext context = EclipseStarter.startup(equinoxArgs,null);
  Bundle bundle = context.installBundle(
    "http://www.eclipsezone.com/files/jsig/bundles/HelloWorld.jar");
  bundle.start();
}

संपादित करें: मेवेन

ऐसा लगता है कि https://groups.google.com/group/spring-osgi/web/maven-url-handler?pli=1 में एक ओएसजीआई यूआरएल हैंडलर सेवा है जो निम्न प्रारूप के यूआरएल ले सकती है और उनसे बंडल लोड कर सकती है ( एमवीएन: // रेपो / बंडल_पैथ)


यह धागा थोड़ा सा हो सकता है, लेकिन वैसे भी ...

पैक्स में मैवेन यूआरएल के लिए उत्कृष्ट समर्थन है, यहां तक ​​कि एक लपेटने वाला यूआरएल हैंडलर भी आपको गतिशील रूप से गैर-ओग्सी जार को अच्छी साफ-सुथरे बंडलों में परिवर्तित करने की इजाजत देता है।

http://wiki.ops4j.org/display/paxurl/Mvn+Protocol

    <dependency>
        <groupId>org.ops4j.pax.url</groupId>
        <artifactId>pax-url-wrap</artifactId>
        <version>1.2.5</version>        
    </dependency>
    <dependency>
        <groupId>org.ops4j.pax.url</groupId>
        <artifactId>pax-url-mvn</artifactId>
        <version>1.2.5</version>        
    </dependency>

आदेश तब होगा:

install -s mvn:groupId:artifactId:version:classifier

नोट: चिकन-अंडे परिदृश्य - आपको इन्हें फ़ाइल का उपयोग करके इंस्टॉल करना होगा: यूआरएल हैंडलर पहले या उन्हें एक ऑटोोडोल्ड निर्देशिका में डाल दें।

करफ ने यह सब अपने विचलन में बनाया है, तो हो सकता है कि करफ लॉन्चर स्रोत पर नज़र डालें?

दूसरा नोट: स्नैपशॉट्स को तैनात करना रेपो यूआरएल में @ स्नैपशॉट्स को जोड़कर सक्षम है, कॉन्फ़िगरेशन को ConfigAdmin के माध्यम से प्रबंधित किया जाता है

अपने सभी पीओएम परिभाषित निर्भरताओं के प्रबंधन के मामले में कराफ सुविधाओं पर एक नज़र डालें - एक प्लगइन है जो एक एक्सएमएल फ़ाइल बनाने में सक्षम होगी जिसका उपयोग तब आपके पूरे ऐप को तैनात करने के लिए किया जा सकता है: http://karaf.apache.org/manual/2.1.99-SNAPSHOT/developers-guide/features-maven-plugin.html

इसके अलावा यह एक्सएमएल आर्टिफैक्ट आपके ओबीआर में तैनात किया जा सकता है, ताकि आप एक वेनिला फेलिक्स / इक्विनोक्स / करफ सेटअप ले सकें, एमवीएन यूआरएल हैंडलर जोड़ें और अपनी कंपनी के एमवीएन रेपो के साथ कॉन्फ़िगर करें और फिर पूरे ऐप को प्रावधान करें =)


किसी भी ओएसजीआई फ्रेमवर्क (आर 4.1 या बाद में) फ्रेमवर्क फैक्टरी एपीआई का उपयोग करके प्रोग्रामेटिक रूप से शुरू किया जा सकता है:

ServiceLoader<FrameworkFactory> ffs = ServiceLoader.load(FrameworkFactory.class);
FrameworkFactory ff = ffs.iterator().next();
Map<String,Object> config = new HashMap<String,Object>();
// add some params to config ...
Framework fwk = ff.newFramework(config);
fwk.start();

ओएसजीआई ढांचा अब चल रहा है। चूंकि Framework Bundle बढ़ाता है, इसलिए आप getBundleContext को कॉल कर सकते हैं और बंडलों में हेरफेर करने, सेवाओं को पंजीकृत करने आदि के लिए सभी सामान्य एपीआई विधियों को कॉल कर सकते हैं। उदाहरण के लिए

BundleContext bc = fwk.getBundleContext();
bc.installBundle("file:/path/to/bundle.jar");
bc.registerService(MyService.class.getName(), new MyServiceImpl(), null);
// ...

आखिरकार आपको ढांचे को बंद करने के लिए इंतजार करना चाहिए:

fwk.stop();
fwk.waitForStop(0);

दोहराने के लिए, यह दृष्टिकोण क्लासपाथ पर फ्रेमवर्क जेएआर डालकर इक्विनोक्स और फ़ेलिक्स सहित किसी भी ओएसजीआई फ्रेमवर्क के लिए काम करता है।


फाइल | परियोजना संरचना | परियोजना सेटिंग्स | मॉड्यूल | पथ टैब | कंपाइलर आउटपुट

निर्माण कलाकृतियों के निर्माण /build जारी रखने के लिए 'इनहेरिट प्रोजेक्ट संकलन आउटपुट पथ' का चयन करें





java maven osgi pax