2012-10-25 25 views
6

मैं एक प्रोजेक्ट पर काम कर रहा हूं, यह एकीकरण परियोजना है, हम अपाचे कैमल और अपाचे कराफ का उपयोग कर रहे हैं। परियोजना में, मैं Jira REST Java client library.लाइब्रेरी को OSGIfy कैसे करें

तो मैं पढ़ा है काफी विभिन्न लेख और कैसे OSGi बंडल करने के लिए गैर OSGi पुस्तकालय रैप करने के लिए के बारे में धागे की बहुत उपयोग करने की आवश्यकता है, लेकिन मैं वास्तव में यकीन है कि अगर मुझे मिल नहीं कर रहा हूँ यह सही।

इसलिए, मैंने आवश्यक पुस्तकालय की निर्भरता के साथ एक पीओएम फ़ाइल बनाई है। एक पैकेज बनाया और इसे कराफ को तैनात करने की कोशिश की, बेशक, कराफ ने लापता पैकेजों की शिकायत की।

तो, मुझे संबंधित मैवेन निर्भरता मिली है, इसे जोड़ा गया है, पैकेज <Import-Package> में और <Embed-Dependency> पर निर्भरता में चला गया है।

एक और दौर, तैनाती, निर्भरता, जोड़, ... और फिर, और फिर, जब तक कराफ बंडल के साथ ठीक नहीं है।

क्या यह वाकई सही है? मुझे लगता है कि मुझे काफी पागल लग रहा है, इसलिए मुझे लगता है कि मुझे इसे सामान्य रूप से नहीं मिला :)

अंत में, पैकेज मेरे काम कंप्यूटर पर स्थिर हो गया, मैंने इसे जल्दी से चेक किया और घर चला गया, वहां मैंने जारी रखा लेकिन, अजीब, मेरे व्यक्तिगत कंप्यूटर पर संकलित एक ही पीओएम/पैकेज काम नहीं कर रहा है, फिर से लापता पैकेज के बारे में शिकायत कर रहा है, लेकिन इस बार, यह पैकेज निश्चित रूप से पीओएम फाइल में है और निश्चित रूप से यह पैकेज में एम्बेड किया गया है, मैं कर सकता हूं इसे वहाँ देखें।

यह अनुपलब्ध पैकेज इस समय org.apache.commons.codec है।

org.osgi.framework.BundleException: Unresolved constraint in bundle jiraclient.bundle [134]: Unable to  resolve 134.0: missing requirement [134.0] osgi.wiring.package; (osgi.wiring.package=org.apache.commons.codec) 
    at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3826)[org.apache.felix.framework-4.0.3.jar:] 
    at org.apache.felix.framework.Felix.startBundle(Felix.java:1868)[org.apache.felix.framework-4.0.3.jar:] 
    at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:944)[org.apache.felix.framework-4.0.3.jar:] 
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundle(DirectoryWatcher.java:1247)[6:org.apache.felix.fileinstall:3.2.6] 
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundles(DirectoryWatcher.java:1219)[6:org.apache.felix.fileinstall:3.2.6] 
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.startAllBundles(DirectoryWatcher.java:1208)[6:org.apache.felix.fileinstall:3.2.6] 
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:503)[6:org.apache.felix.fileinstall:3.2.6] 
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:291)[6:org.apache.felix.fileinstall:3.2.6] 

तो, अब मैं क्या गलत :(

सुंदर कृपया, दोस्तों, मेरी मदद करो। धन्यवाद!

पोम फ़ाइल लंबा है पूरी तरह से उलझन में हूँ, है, इसलिए मुझे लगता है कि कड़ी है बेहतर: http://pastebin.com/j5cmWveG

+0

और क्या आपने अपने बंडल को स्थापित करने से पहले करफ में कॉमन्स-कोडेक स्थापित किया है? अपवाद आपको बताता है कि इसे एक पैकेज आयात करने की आवश्यकता है जिसे वह नहीं मिल सकता है। हां IMHO फ़ेलिक्स से अपवादों को उपयोगकर्ता को समाप्त करने के लिए बेहतर समझाया जाना चाहिए, इसका क्या अर्थ है। –

+0

हैलो क्लॉस, आपसे मिलकर अच्छा लगा (बीटीडब्ल्यू, "वर्मल इन एक्शन" पुस्तक के लिए धन्यवाद :))। इसका क्या अर्थ है, "कॉमन्स-कोडेक स्थापित"? ऐसा लगता है कि मेरे करफ इंस्टेस में, कम से कम बंडल स्थापित और सक्रिय है: karaf @ root> बंडल: सूची | grep कोडेक [246] [स्थापित] [] [] [80] एमवीएन: कॉमन्स-कोडेक/कॉमन्स-कोडेक/1.2 क्या यह पर्याप्त है? क्या यह बंडल आवश्यक कक्षाओं का पर्दाफाश करता है? मुझे लगता है कि बंडल निर्यात को कैसे पता चलाना है, लेकिन मुझे अभी नहीं पता :( बीटीडब्ल्यू, मेरे पास लाइब्रेरी बंडल में एम्बेडेड कॉमन्स-कोडेक पैकेज है, यह क्यों काम नहीं करता है? – stibi

+1

शायद बंडल को "org.apache.commons.codec" को स्पष्ट रूप से निर्यात करना है, इसलिए एम्बेडेड जिरा आराम पुस्तकालय उसी बंडल में इसका उपयोग कर सकता है? क्या यह समझ में आता है? – stibi

उत्तर

9

हाँ OSGi IMHO है, इसकी तैनाती मॉडल के संदर्भ में "अब तक का उपयोग करने के लिए आसान से" MANIFEST.MF फाइलों में OSGi मेटाडाटा के साथ 100% बंडलों की आवश्यकता होती है और आप गणित में पीएचडी की जरूरत BND उपकरण को समझने के लिए। और दुर्भाग्य से कई जेएआर ओएसजीआई बंडल नहीं हैं।

सभी आयातों के साथ अपनी pom.xml फ़ाइल को देखकर, निर्यात, और "समझने में आसान नहीं" वाक्यविन्यास, किसी भी औसत इंजीनियर को यह समझने के लिए केवल 5-सेकेंड लेगा कि यह "राज्य में कुछ गड़बड़ है डेनमार्क "; उदाहरण के लिए ओएसजीआई! = जिस दुनिया में हम रहते हैं। यह आसान होना चाहिए और आईएमएचओ होना चाहिए। http://karaf.apache.org/manual/latest/developers-guide/creating-bundles.html

एक और चाल है, एक uber JAR बनाने के लिए जैसे यह सब एक एकल JAR फ़ाइल में डाल दिया और आप तो करने के लिए:

आप रैप यूआरएल हैंडलर का उपयोग कर Karaf में एक सादे JAR स्थापित कर सकते हैं इसे तैनात कर सकते हैं। http://www.davsclaus.com/2012/08/osgi-deployment-made-easy-with-fab.html

:

वहाँ भी फैब (फ्यूज बंडल) जो OSGi तैनाती आसान बनाता है, के रूप में यह तैनाती समय में आप के लिए यह पागलपन का ज्यादा संभालती है, बजाय आप OSGi MANIFEST.MF पागलपन से निपटने के लिए होने का है

+0

आप अपने बंडल में डायनामिक आयात * के साथ भी कोशिश कर सकते हैं। इसे फ़ेलिक्स बंडल प्लगइन पर कॉन्फ़िगर किया जा सकता है। http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html –

+0

<गतिशील आयात-पैकेज> *

+0

यह भी आसान IMHO होना चाहिए और भी होना चाहिए! – igr