I am looking for a step by step guide to convert jar into an OSGi bundle using the eclipse bndtools plugin. I know it is possible to do it with bnd using the command line but would be nice to know how to do the same via the IDE.
I might be missing something but this tutorial only explains how to create a project from scratch.
Follow the article Create Eclipse plugins (OSGi bundles) from standard jar to achieve this. Though this approach does not use Bnd, but you would be able to achieve what you want.
In short you can do following:
Create a new Plugin project by selection File-> New -> Project...-> Plug-in Development -> "Plug-in from Existing JAR Archives"
Select jars you want to have in this new plugin(bundle). Enter other plugin data(name, version, id etc.).
- Uncheck the flag
Unzip the JAR archive into the project
. Press then finish.
Unchecking the checkbox Unzip the JAR archive into the project
, prevents extracting class files from the Jar which is usually not necessary.
EDIT :
To Export your bundle to install it into a OSGi runtime. Select your bundle and choose File -> Export -> Plug-in Development -> "Deployable plug-ins and fragment"
.
Uncheck the checkbox to Export source.
- Just create a new project in bndtools for all (or related) jars that you want to convert.
- Give this project a name that will be the prefix of the bundle symbolic name of the converted jars. E.g. if your company is acme, call the project 'com.acme'
- Download the jar and sources in a jar directory
- Create a new bundle descriptor with a -classpath entry (File/New/Bundle Descriptor), for example:
-classpath: jar/htmlcleaner-2.2.jar, jar/htmlcleaner-2.2-src.zip
Export-Package: org.htmlcleaner.*;version=1.0
Import-Package: org.apache.tools.ant;resolution:=optional,\
org.jdom;resolution:=optional,\
*
Bundle-Version: 2.2.1
After saving this file, look in the generated directory, voila, there is your bundle! You can reuse the same project for any number of bundles you want to wrap.
You can then release the bundle to one of the repositories. Select the bnd.bnd file and select Release Bundle with the context menu.
Edit: NB
You can't directly use a 'wrap' project from other projects, since Eclipse needs the source tree for that to work. There are 2 workarounds for this:
- Put the wrapped bundled in a repository and use it from there (as described above)
- Unpack the source tree in the src folder of the project
https://github.com/bndtools/bndtools/wiki/How-to-Wrap-Bundles
Additionally to the existing answers you might be interested in this blog post which explains how to create that OSGi bundle from a jar with "pure maven", i.e. without the need of a specific IDE and/or plugins. (To be precise, under the hood it is once more bnd with does the real work ;))