Plugin for sbt to to create OSGi bundles.
sbt-osgi is a plugin for sbt. In order to install sbt, please refer to the sbt documentation. Please make sure that you are using a suitable version of sbt:
- sbt-osgi 0.5 → sbt 0.12
- sbt-osgi 0.7 → sbt 0.13
As sbt-osgi is a plugin for sbt, it is installed like any other sbt plugin, that is by mere configuration: just add sbt-osgi to your global or local plugin definition. Global plugins are defined in ~/.sbt/<SBT_VERSION>/plugins/plugins.sbt
and local plugins are defined in project/plugins.sbt
in your project.
In order to add sbt-osgi as a plugin, just add the below setting to the relevant plugin definition, paying attention to blank lines between settings:
// Other stuff
addSbtPlugin("com.typesafe.sbt" % "sbt-osgi" % "0.7.0")
If you want to use the latest and greates features, you can also give the latest snapshot release a try:
// Other stuff
resolvers += Classpaths.sbtPluginSnapshots
addSbtPlugin("com.typesafe.sbt" % "sbt-osgi" % "0.8.0-SNAPSHOT")
Add the below line to your sbt build definition, which adds the task osgiBundle
which creates an OSGi bundle for your project and also changes the publish
task to publish an OSGi bundle instead of a raw JAR archive. Again, pay attention to the blank line between settings:
// Other stuff
osgiSettings
If you just want osgiBundle
, i.e. don't want to change the behavior of publish
:
// Other stuff
defaultOsgiSettings
sbt-osgi can be configured with the following settings:
bundleActivator
: value forBundle-Activator
header, default isNone
bundleSymbolicName
: value forBundle-SymbolicName
header, default isorganization
plusname
bundleVersion
: value forBundle-Version
header, default isversion
dynamicImportPackage
: values forDynamic-ImportPackage
header, default is the empty sequenceexportPackage
: values forExport-Package
header, default is the empty sequenceimportPackage
: values forImport-Package
header, default is*
fragmentHost
: value forFragment-Host
header, default isNone
privatePackage
: values forPrivate-Package
header, default isOsgiKeys.bundleSymbolicName
plus.*
requireBundle
: values forRequire-Bundle
header, default is the empty sequenceadditionalHeaders
: map of additional headers to be passed to BND, default is the empty sequenceembeddedJars
: list of dependencies to embed inside the bundle which are automatically added toBundle-Classpath
Example build.sbt
:
organization := "com.typesafe.sbt"
name := "osgi.demo"
version := "1.0.0"
libraryDependencies += "org.osgi" % "org.osgi.core" % "4.3.0" % "provided"
osgiSettings
OsgiKeys.exportPackage := Seq("com.typesafe.sbt.osgidemo")
OsgiKeys.bundleActivator := Option("com.typesafe.sbt.osgidemo.internal.Activator")
Contributions via GitHub pull requests are gladly accepted from their original author. Before we can accept pull requests, you will need to agree to the Typesafe Contributor License Agreement online, using your GitHub account - it takes 30 seconds.
This code is open source software licensed under the Apache 2.0 License.