2012-04-18 10 views
6

Estoy usando sbtosgi plugin para generar un paquete OSGi a partir de una compilación sbt usando bnd. El paquete sbtosgi proporciona la tarea osgi-bundle para generar el paquete. Usando la configuración predeterminada para sbtosgi, ejecutando osgi-bundle desde el indicador sbt se actualiza el JAR para incluir los encabezados correctos, pero al ejecutar limpiar el paquete resulta en un JAR sin encabezados OSGi. En Maven hablo, estoy tratando de hacer el equivalente de usar maven-bundle-plugin con packaging = bundle - es decir, el artefacto principal del proyecto debe ser un paquete OSGi.Cómo usar sbtosgi para generar paquete osgi como parte de la tarea de publicar sbt

Basándome en la lectura del plugin sbtosgi, me parece que la tarea osgi-bundle sobrescribe el JAR creado por packageBin. He intentado anular la definición de packageBin modo que utiliza la tarea osgi-paquete en lugar de la tarea por defecto:

packageBin in Compile <<= OsgiKeys.bundle 

Esto dio lugar a una referencia cíclica sin embargo:

[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 

Soy bastante nuevo en SBT y no estoy seguro de a dónde ir desde aquí. Cualquier ayuda sería apreciada.

Respuesta

5

Parece que mi sugerencia inicial a través de Twitter que utilizó no funciona. Lo siento por eso. Pero afortunadamente tenía a Mark Harrah sentado junto a mí y aquí viene una solución funcional:

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

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

Gracias, esto funciona genial! – mpilquist

Cuestiones relacionadas