2012-04-18 33 views
6

我使用sbtosgi plugin從sbt構建中使用bnd生成OSGi包。 sbtosgi軟件包提供用於生成軟件包的任務osgi-bundle任務。使用sbtosgi的默認配置,從sbt提示符運行osgi-bundle更新JAR以包含正確的頭文件,但運行的是clean包會生成沒有OSGi頭的JAR。在Maven的發言中,我試圖做與使用package = bundle一樣使用maven-bundle-plugin的等價物,也就是說,項目的主要工件應該是OSGi包。如何使用sbtosgi生成osgi包作爲sbt發佈任務的一部分

根據讀取sbtosgi插件的源代碼,在我看來,osgi-bundle任務會覆蓋由packageBin創建的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 

我是相當新的SBT我不確定該從哪裏出發。任何幫助,將不勝感激。

回答

5

看起來像我通過Twitter的初步建議,你使用不起作用。對不起。但幸運的是我有馬克哈拉坐在我旁邊,這裏來一個工作解決方案:

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

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

謝謝,這個作品太棒了! – mpilquist 2012-04-18 16:04:43

相關問題