2012-04-18 14 views
6

के हिस्से के रूप में ओजीआई बंडल उत्पन्न करने के लिए sbtosgi का उपयोग कैसे करें मैं बीएनडी का उपयोग कर एक एसबीटी बिल्ड से ओएसजीआई बंडल उत्पन्न करने के लिए sbtosgi plugin का उपयोग कर रहा हूं। Sbtosgi बंडल बंडल उत्पन्न करने के लिए osgi-bundle कार्य प्रदान करता है। Sbtosgi के लिए डिफ़ॉल्ट कॉन्फ़िगरेशन का उपयोग करते हुए, sbt प्रॉम्प्ट से osgi-bundle चलाते हुए JAR को उचित शीर्षलेख शामिल करने के लिए अद्यतन किया जाता है, लेकिन क्लीन पैकेज चल रहा है ओएसजीआई हेडर के बिना एक JAR में परिणाम। मेवेन में बोलते हैं, मैं पैकेजिंग = बंडल के साथ मेवेन-बंडल-प्लगइन का उपयोग करने के बराबर करने की कोशिश कर रहा हूं - यानी, परियोजना का मुख्य आर्टिफैक्ट ओएसजीआई बंडल होना चाहिए।एसबीटी प्रकाशित कार्य

sbtosgi प्लगइन के स्रोत को पढ़ने के आधार पर, मुझे लगता है कि osgi-bundle कार्य पैकेजबिन द्वारा बनाए गए JAR को ओवरराइट करता है। मैं packageBin की परिभाषा अधिभावी की कोशिश की है ताकि यह डिफ़ॉल्ट कार्य के बजाय OSGi-बंडल कार्य के लिए इस्तेमाल किया:

packageBin in Compile <<= OsgiKeys.bundle 

यह हालांकि एक चक्रीय संदर्भ में हुई:

[error] Cyclic reference involving 
[error] {file:project/*:osgi-bundle 
[error] {file:project/compile:full-classpath 
[error] {file:project/compile:exported-products 
[error] {file:project/compile:package-bin 

मैं नहीं बल्कि एसबीटी के लिए नए और मुझे यकीन नहीं है कि यहां से कहाँ जाना है। किसी भी सहायता की सराहना की जाएगी।

उत्तर

5

ऐसा लगता है कि ट्विटर के माध्यम से मेरा प्रारंभिक सुझाव आपके द्वारा उपयोग नहीं किया जाता है। उसके लिए खेद है। लेकिन सौभाग्य से मेरे पास मार्क हाराह मेरे बगल में बैठा था और यहां एक कामकाजी समाधान आता है:

packagedArtifact in (Compile, packageBin) <<= (artifact in (Compile, packageBin), OsgiKeys.bundle).identityMap 

artifact in (Compile, packageBin) ~= (_.copy(`type` = "bundle")) 
+1

धन्यवाद, यह बहुत अच्छा काम करता है! – mpilquist

संबंधित मुद्दे