2008-08-24 11 views
30

मैं एक जावा प्रोग्राम बनाना चाहता हूं जिसे प्लगइन के साथ बढ़ाया जा सकता है। मैं यह कैसे कर सकता हूं और मुझे कहां देखना चाहिए?प्लगइन योग्य जावा प्रोग्राम कैसे बनाएं?

मेरे पास इंटरफ़ेस का एक सेट है जो प्लगइन को कार्यान्वित करना चाहिए, और यह एक जार में होना चाहिए। कार्यक्रम को एक सापेक्ष (प्रोग्राम में) फ़ोल्डर में नए जारों के लिए देखना चाहिए और उन्हें किसी भी तरह पंजीकृत करना चाहिए।


हालांकि मुझे एक्लिप्स आरसीपी पसंद है, मुझे लगता है कि यह मेरी सरल आवश्यकताओं के लिए बहुत अधिक है।

वही बात वसंत के लिए जाती है, लेकिन जब से मैं इसे देखने जा रहा था, मैं भी कोशिश कर सकता हूं।

लेकिन फिर भी, मैं अपनी खुद की प्लगइन "ढांचे" को यथासंभव सरल बनाने का एक तरीका ढूंढना पसंद करूंगा।

+0

संभव डुप्लिकेट http://stackoverflow.com/questions/465099/best-way-to-build-a-plugin-system-with-java)। यह पहले है, लेकिन दूसरा अंत में अधिक लोकप्रिय हो गया। –

उत्तर

37

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

MyModule modInstance = (MyModule)loadedClass.newInstance(); 
:

File dir = new File("put path to classes you want to load here"); 
URL loadPath = dir.toURI().toURL(); 
URL[] classUrl = new URL[]{loadPath}; 

ClassLoader cl = new URLClassLoader(classUrl); 

Class loadedClass = cl.loadClass("classname"); // must be in package.class name format 

वर्ग के लोड होते ही यही है, अब आप इसे का एक उदाहरण बनाने की जरूरत, इंटरफेस नाम संभालने MyModule है:

एक तरह से आप इसके बारे में जा सकते हैं यह है

+0

मुझे पता है कि मैं इस धागे पर थोड़ा देर हो चुकी हूं, लेकिन क्या होगा यदि आप निर्देशिका में सभी दिए गए वर्गों के माध्यम से लूप करना चाहते हैं और उन्हें लोड करना चाहते हैं? क्या कहीं कहीं मैं एक कार्यान्वयन कार्यान्वयन और कोड ऑनलाइन देख सकता हूं? इसके अलावा, मैं आप में से अधिकांश कोड को समझता हूं और यह बहुत आसान है, धन्यवाद! +1 –

+1

@ कोडीरिचर्डसन http://www.knowbase.org/viewtopic.php?id=31 पर सरल कार्यान्वयन का एक पूरा उदाहरण है; यह जावा 8 और ग्रैडल 4 का उपयोग करता है। – Alexiy

+0

@Alexiy उस लिंक के लिए धन्यवाद, इससे बहुत मदद मिली और मूल रूप से मुझे जो कुछ चाहिए था। यह पहली बार थोड़ा अधिक जटिल था (ज्यादातर भेड़ का बच्चा) लेकिन ऐसा इसलिए है क्योंकि मैं जावा नोब हूं :) मैंने इसे कुछ बार देखा और यह बहुत अधिक समझ में आया। उसके लिए धन्यवाद! –

1

क्या आपने ग्रहण के रिच क्लाइंट प्लेटफ़ॉर्म के शीर्ष पर इमारत पर विचार किया है, और फिर ग्रहण विस्तार ढांचे को उजागर किया है?

इसके अलावा, अपनी आवश्यकताओं पर निर्भर करता है, स्प्रिंग फ्रेमवर्क उस के साथ मदद कर सकता है और अन्य बातों के आप क्या करना चाहते हो सकता है: http://www.springframework.org/

14

मैं अनुशंसा करता हूं कि आप the Java Service Provider (SPI) API पर नज़र डालें। यह क्लासपाथ पर सभी जारों में सभी कक्षाओं को खोजने के लिए एक सरल प्रणाली प्रदान करता है जो स्वयं को एक विशेष सेवा को लागू करने के रूप में उजागर करता है। मैंने इसे अतीत में प्लगइन सिस्टम के साथ बड़ी सफलता के साथ उपयोग किया है।

+2

ध्यान दें कि sun.misc. सेवा वर्ग क्लास java.util.ServiceLoader द्वारा हटा दिया गया है। ओएसजीआई के लिए –

16

OSGi पर देखें।

एक तरफ, ओएसजीआई मॉड्यूलर सॉफ्टवेयर घटकों के साथ कई अन्य चीजों के प्रबंधन, शुरू करने और करने के लिए सभी प्रकार के बुनियादी ढांचे प्रदान करता है। दूसरी तरफ, यह आपकी आवश्यकताओं के लिए मुझे बहुत भारी वजन दे सकता है।

संयोग से, एक्लिप्स अपने प्लगइन को प्रबंधित करने के लिए ओएसजीआई का उपयोग करता है।

+1

+1। मुझे सरल क्लासलोडर ट्रिकरीज (जो आपको कई पहियों को फिर से शुरू करने के लिए छोड़ देगा) के बीच सही आकार मिलती है और ग्रहण आरसीपी (इतना जटिल कार्य नहीं करने के लिए बड़े ढांचे)। – Leonel

4

घर से उगाए गए क्लासलोडर दृष्टिकोण पर: जबकि क्लासलोडर के बारे में जानने के लिए यह निश्चित रूप से एक अच्छा तरीका है, "क्लासलोडर नरक" कहा जाता है, जिसे ज्यादातर बड़ी परियोजनाओं में उपयोग करने के लिए लोगों के साथ कुश्ती करने वाले लोगों द्वारा जाना जाता है। विवादित वर्गों को पेश करना आसान है और हल करना मुश्किल है।

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

6

हालांकि मूलभूत प्लगइन समर्थन की आवश्यकता होती है (जो कि ज्यादातर समय होता है), तो Java Plugin Framework (जेपीएफ) भी है, हालांकि उचित दस्तावेज की कमी होने पर, यह बहुत साफ है प्लगइन ढांचे कार्यान्वयन।

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

plugins 
`-com.my.package.plugins 
    `-com 
    `-my 
     `-package 
     `-plugins 
      |- Class1.class 
      `- Class2.class 
[जावा के साथ एक प्लगइन प्रणाली का निर्माण करने का सबसे अच्छा तरीका] (की