aliopi
aliopi

Reputation: 3842

How to create a working OSGI bundle for Apache POI 3.8?

My goal is to create an Excel 2007 document (XLSX) in an Eclipse RCP Environment (Excel 2003 is simple). I don't want to place the POI jars inside a /lib folder, instead I want to use a working POI OSGI bundle from my target definition.

All my attempts so far have failed to create a working OSGI bundle of POI 3.8. What I did so far:

This is where I got so far. I think working with bnd wrap is not enough. Probably I must create a bnd.properties file and have explicit Export-Package/Import-Package statements but which work?

So, has anyone successfully managed to create a working POI 3.8 OSGI bundle?

Upvotes: 6

Views: 5001

Answers (4)

evandor
evandor

Reputation: 789

If you are interested in a working example of the approach with BND, you can have a look at this project, providing a pom and a bnd file (inspired by Jarek's answer):

https://github.com/evandor/skysail-bundled-libraries/tree/master/skysail.bundles.poi

Running "mvn install" gives you an "OSGi-flavored" POI jar, which can be found as well here:

https://oss.sonatype.org/content/groups/public/de/twentyeleven/skysail/org.apache.poi-osgi/3.8/

You might have to play a bit with the bnd file to make it create the exact OSGi bundle you need (maybe you don't need all the dependencies, or you want to mark them as optional).

You will find all the documentation needed on the bnd homepage. I recommend starting with this page if you haven't used this great tool before.

Upvotes: 1

Jarek Przygódzki
Jarek Przygódzki

Reputation: 4412

I don't know about 3.8, but creating working OSGi bundle for 3.7 is quite easy with Bnd.

-classpath: poi-3.7-20101029.jar, 
  poi-ooxml-3.7-20101029.jar,
  poi-ooxml-schemas-3.7-20101029.jar, 
  poi-scratchpad-3.7-20101029.jar
Bundle-Name: Apache POI
Bundle-SymbolicName: org.apache.poi
Bundle-Version: 3.7.0
Bundle-ClassPath: .
Private-Package: *
Export-Package: org.apache.poi.*;-split-package:=merge-first
Import-Package: !org.openxmlformats.schemas*, \
  !schemasMicrosoftComOfficePowerpoint*, \
  !schemasMicrosoftComOfficeWord*, \
  junit*;resolution:=optional, \
  org.apache.commons.logging;resolution:=optional, \
  *
Include-Resource: @poi-3.7-20101029.jar, \
  @poi-ooxml-3.7-20101029.jar, \
  @poi-ooxml-schemas-3.7-20101029.jar, \
  @poi-scratchpad-3.7-20101029.jar

Upvotes: 1

Yogesh Chawla
Yogesh Chawla

Reputation: 1601

I was able to do after some serious head banging. You can see the POM file over here:

http://servicemix.396122.n5.nabble.com/Apache-Poi-3-7-component-tc4912054.html#a5009396

I had to repackage XMLBeans 2.3.0 and embed in the bundle.

Cheers, Yogesh

Upvotes: 1

earcam
earcam

Reputation: 6692

If you don't need that specific version, simply use http://ebr.springsource.com/repository/app/bundle/version/detail?name=com.springsource.org.apache.poi&version=3.0.2.FINAL that page lists it's dependencies etc (which you can also download or reference if you're using Maven/Ivy)

May be http://engroup.sourceforge.net/maven2/engroup/osgi/commons/poi-osgi/3.1/ or http://ebr.springsource.com/repository/app/search?query=poi can provide some inspiration (in the first link there's a maven POM that lists the (bnd) instructions in the bundle plugin section).

Why are you merging the jars? Why not try wrapping each individually?

A second thing to try is to use existing OSGi'd jars of xmlbeans, stax-api and dom4j

Also you can configure what the JRE (system bundle) exports using "org.osgi.framework.system.packages" - so you can choose not to export org.w3c.dom

Upvotes: 5

Related Questions