जावा के साथ प्लगइन सिस्टम बनाने का सबसे अच्छा तरीका


145

आप अपने जावा एप्लिकेशन के लिए प्लग-इन सिस्टम कैसे लागू करेंगे?

क्या यह (डेवलपर के लिए) प्रणाली का उपयोग करना आसान है जो निम्नलिखित प्राप्त करता है:

  • उपयोगकर्ता अपने प्लगइन्स को ऐप के एक उपनिर्देशिका में डालते हैं
  • प्लगइन एक विन्यास स्क्रीन प्रदान कर सकता है
  • यदि आप एक रूपरेखा का उपयोग करते हैं, तो क्या लाइसेंस वाणिज्यिक विकास के साथ संगत है?

जवाबों:


107

पहले आपको एक इंटरफ़ेस की आवश्यकता है जिसे सभी प्लगइन्स को लागू करने की आवश्यकता है, जैसे

public interface Plugin {
    public void load(PluginConfiguration pluginConfiguration);
    public void run();
    public void unload();
    public JComponent getConfigurationPage();
}

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

बेशक आप कुछ प्रकार के सैंडबॉक्सिंग को भी लागू करना चाह सकते हैं ताकि प्लगइन यह क्या है और क्या नहीं कर सकता है में प्रतिबंधित है। मैंने एक छोटा परीक्षण एप्लिकेशन बनाया है (और इसके बारे में ब्लॉग किया गया है ) जिसमें दो प्लगइन्स शामिल हैं, जिनमें से एक को स्थानीय संसाधनों तक पहुंच से वंचित किया गया है।


2
आपके द्वारा उल्लेख किया गया सैंडबॉक्स वास्तव में सबसे कठिन हिस्सा है! लेकिन झल्लाहट के लिए नहीं - ऊपर बताए अनुसार ओस्गी आपके लिए पहले से ही ऐसा करता है।
Chii

1
सैंडबॉक्सिंग उतना मुश्किल नहीं है। मुझे यह पता लगाने में दो सप्ताह का समय लगा कि इसे सही तरीके से कैसे किया जाए, लेकिन एक बार जब आप जानते हैं कि यह बहुत सरल है। :)
बॉम्बे

@Bombe यह उदाहरण अनुप्रयोग अभी भी कहीं भी रहता है?
ataulm


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

41

OSGi का उपयोग करें ।

यह ग्रहण प्लग-इन सिस्टम की नींव है। इक्विनॉक्स एक्लिप्स का कार्यान्वयन (लाइसेंस प्राप्त ईपीएल) है और फेलिक्स अपाचे प्रोजेक्ट का कार्यान्वयन (लाइसेंस अपाचे पब्लिक लाइसेंस) है।

ग्रहण एक ठोस उदाहरण प्रदान करता है जिसे OSGi आपके द्वारा बताए गए बिंदुओं को कवर कर सकता है (या यदि आप पूर्ण ग्रहण / SWT / JFace स्टैक चाहते हैं तो आप अपने आवेदन को RCP के शीर्ष पर बना सकते हैं )।


4
मैंने OSGi के साथ डब किया है, लेकिन इसके लिए वास्तव में अच्छा प्राइमर नहीं मिला है। यह बहुत अच्छा होगा यदि कोई व्यक्ति यहां कुछ लिंक सुझा सकता है।
ब्रायन मैथ्यूज

1
मैं अपने आवेदन में विषुव एम्बेडेड है और मानक OSGi प्रथाओं का इस्तेमाल किया है कि वास्तव में ओपी क्या चाहता है। स्विंग में भी, SWT नहीं। साथ ही वेबस्टार्ट किया गया। अच्छा प्रारंभिक संसाधन: neilbartlett.name/blog
बासेज़ेरो

3
OSGi आदर्श रूप से डी वास्तविक प्लगइन प्रणाली है। हालांकि, मानक जावा से OSGi प्रोग्रामिंग मॉडल की छलांग बहुत व्यापक है ...
हेंडी इरावन

30

1.6 के बाद से, java.util.ServiceLoader का उपयोग किया जा सकता है जिसे आप अपने स्वयं के सरल सिस्टम को कोड करना चाहते हैं।

लेकिन अगर आप मूलभूत सुविधाओं से अधिक कुछ चाहते हैं, तो मौजूदा रूपरेखाओं में से एक का उपयोग करें।


16

क्या यहाँ किसी ने JPF का उपयोग किया है? दिलचस्प लगता है
स्वेन लिलिएनथाल

1
JabRef अपने प्लगइन्स के लिए JPF का उपयोग करता है। काफी अच्छा काम करता है।
कोपरपोर

मैं जेपीएफ का उपयोग कर रहा हूं, लेकिन यह एंट के साथ कसकर जुड़ा हुआ है। मैं इससे छुटकारा पाना चाहता हूं लेकिन मुझे नहीं पता कि मेरे आवेदन पर इसका कितना प्रभाव पड़ेगा।
मार्टिन जू

मैंने एक ओपन सोर्स प्रोडक्ट (OpenEMM) के लिए JPF प्लगइन बनाया; मैं इसे मावेन (मावेन-असेंबली प्लगइन) के साथ बनाने में सक्षम था; यह सुनिश्चित करने के लिए कि मैं वास्तव में विकास की सादगी की सराहना करता हूं यहां तक ​​कि शायद यह ओएसजीआई है जो अधिक लोकप्रिय है।
рüффп

क्या जेपीएफ का उपयोग करने के लिए जावा संस्करणों पर कोई प्रतिबंध है?
माधव

16

PF4J का उपयोग करें । इसमें वेब, स्प्रिंग और विकेट के लिए सपोर्ट है। अनुप्रयोगों का उपयोग और निर्माण करना आसान है


मुझे लगता है कि मुझे इसकी आवश्यकता है और यह काफी सरल प्रतीत होता है, लेकिन मुझे इस पर कुछ मदद चाहिए
nonybrighto

गितुब पर देसबल से सवाल उठाने की कोशिश करें। वह आपकी मदद करेगा
डैनियल जिपा

देख meta.stackoverflow.com/questions/376686/... Decebals खाते की स्थिति पर यहाँ
वोल्फगैंग Fahl

1
यदि आप pf4j देख रहे हैं, तो आप github.com/hank-cp/sbp पर भी नज़र डाल सकते हैं । यह एक पूर्ण वेब एप्लिकेशन बनाने के लिए स्प्रिंग बूट का समर्थन करने के लिए pf4j के शीर्ष पर बनाया गया है।
हांक

13

मैंने एक सप्ताह के लिए OSGi पर काम किया - एक गहन, और कुछ नहीं, लेकिन OSGi सप्ताह। अंत में यह एक बुरे सपने जैसा था लेकिन मैंने बहुत कुछ सीखा।

मैं OSGi को काम में लाने में सक्षम था (आसान नहीं है, सभी उदाहरण पुराने हैं, नेट पर सब कुछ कम से कम तीन साल पुराना है अगर पाँच नहीं), लेकिन मुझे गंभीर समस्या थी क्योंकि मौजूदा प्रोजेक्ट में इसे एकीकृत करना मुश्किल था। जार प्रकट होता है।

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

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

हर कदम एक बड़ी बाधा है। मैं बाद में यहां कुछ और विवरण पोस्ट करने की कोशिश करूंगा।


17
यह कैसा उत्तर है? यह OSGi के बारे में एक शेख़ी से अधिक है, और आप यह भी नहीं बता रहे हैं कि OSGi क्या है।
चुपके रब्बी

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

9

मुझे लगता है कि उपरोक्त समस्या को हल करने के लिए ओएसजीआई की सिफारिश करना बेहद खराब सलाह है। OSGi "सही विकल्प" है, लेकिन ऊपर के रूप में एक परिदृश्य के लिए, मुझे लगता है कि या तो JPF या कुछ देसी न्यूनतम ढांचा पर्याप्त है।


3

सालों पहले मैंने इस तरह का एक प्रोजेक्ट शुरू किया था और मुझे उम्मीद है कि जल्द ही यह तैयार हो जाएगा। मुझे नेटबीन और एक्लिप्स जैसी परियोजनाओं से प्रेरणा मिली लेकिन इस बीच यह थोड़ा अलग हो गया। OSGi अब एक अच्छी पसंद की तरह दिखता है, लेकिन मुझे अपनी परियोजना के साथ तुलना करने का मौका नहीं मिला। यह ऊपर वर्णित JPF के साथ समान है, लेकिन एक ही समय में कई मायनों में अलग है।

मूल विचार जिसने मुझे प्रेरित किया है, जावा अनुप्रयोग का निर्माण करना जितना आसान हो सकता है, वेब अनुप्रयोगों, डेस्कटॉप अनुप्रयोगों या एप्लेट / जेडब्ल्यूएस अनुप्रयोगों के बीच कोई पृथक्करण नहीं है (बेशक यह यूआई को कवर नहीं करता है - अभी तक) एक मुख्य कार्यक्षमता के रूप में।

मैंने अपने दिमाग में कुछ लक्ष्यों के साथ परियोजना का निर्माण किया:

  • इससे कोई फर्क नहीं पड़ता कि आप एक वेब एप्लिकेशन या डेस्कटॉप एप्लिकेशन का निर्माण करते हैं, आपको उसी तरह से एप्लिकेशन को शुरू करना चाहिए, एक सादा मुख्य तरीका, कोई फैंसी web.xml घोषणा (ऐसा नहीं है कि मैं एक मानक वेब डिस्क्रिप्टर होने के खिलाफ हूं, लेकिन यह प्लग-इन सिस्टम के साथ अच्छी तरह से नहीं चलता है, जहां आप "सर्वलेट्स" जोड़ते हैं - मैं उन्हें RequestHandler (s) - आपकी इच्छा पर गतिशील) कहता हूं।
  • एक "विस्तार बिंदु" के आसपास "एक्सटेंशन" में प्लग करना आसान है - ग्रहण से कुछ लेकिन एक अलग दृष्टिकोण।
  • स्व-परिनियोज्य, चूंकि सभी प्लगइन्स पंजीकृत हैं (एक्सएमएल फाइलें) आवेदन को स्व-परिनियोजित होना चाहिए निर्माण प्रणाली से स्वतंत्र - निश्चित रूप से एक चींटी कार्य और एक मावेन MOJO है जो हमारे उलटी दुनिया के साथ लिंक हैं, लेकिन में अंत में यह एप्लिकेशन को कॉल करता है और इसे एक विशिष्ट स्थान पर स्वयं को तैनात करने का निर्देश देता है।
  • मावेन से उधार लिया गया है, यह रिपॉजिटरी से कोड डाउनलोड कर सकता है (मावेन 1 और 2 रिपॉजिटरी सहित) ताकि आपका एप्लिकेशन एक ही छोटे जार के रूप में तैनात किया जा सके जब तक आपके पास रिपॉजिटरी तक पहुंच हो (उपयोगी कुछ समय, और मूल रूप से यह ऑटो के लिए समर्थन प्रदान करता है) अपडेट - क्या आपको अपने वेब एप्लिकेशन द्वारा अधिसूचित किए जाने वाले विचार से प्यार नहीं है कि एक नया संस्करण है, इसे डाउनलोड किया गया था और इसे स्थापित करने के लिए बस आपकी अनुमति की आवश्यकता है? मुझे पता है कि मैं उससे प्यार करता हूं)।
  • सिस्टम स्वास्थ्य के बारे में बुनियादी आवेदन की निगरानी, ​​विफलताओं के मामले में ईमेल सूचनाएं

2
मेरा मतलब यह नहीं है कि आप इस पर काम कर रहे हैं? क्या कोड उपलब्ध है (मैं इसे उपयोग करने में सक्षम हो सकता हूं या इसे जोड़ सकता हूं)?
पिकाको
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.