How to use Gradle to repackage a jar as an OSGi bundle?


(Matt Bellinger) #1

I am working on a project that will be using OSGi. We depend on a few third party libraries that we would like to repackage as OSGi bundles. Is there a built in way in Gradle to take a non-OSGi jar, and repackage it with the OSGi headers in the manifest?


(Luke Daley) #2

Hi,

There’s currently nothing built in specifically. It’s pretty easy to repackage a jar with a new manifest though:

apply plugin: "osgi"
  task fooJar(type: Jar) {
    from zipTree("path/to/some.jar")
    manifest = osgiManifest {
        instruction 'Bundle-Vendor', 'MyCompany'
        }
}

The api for the osgiManifest method is: http://www.gradle.org/docs/current/javadoc/org/gradle/api/plugins/osgi/OsgiManifest.html


(Matt Bellinger) #3

I think this should get me enough of what I need it for. Thank you.


(Matt Bellinger) #4

I take that back, something is not quite right:

task createOsgiBundle(type:Jar) {
    from zipTree( '/path/to/my.jar' )
    manifest = osgiManifest {
        instruction 'Bundle-Vendor', 'VendorName'
    }
}

Running this task causes the following exception:

https://gist.github.com/anonymous/4717044


(Luke Daley) #5

If you can provide a complete project that I can play with I can help further.


(manfmob) #6

What’s about license problems, is it allways allowed to repackage a third party library?