Cómo usar Apache POI en OSGi
Quiero usar Apache POI en OSGi para escribir un libro de Excel con la transmisión, API OOXML (SXSSF). La API de transmisión está disponible desde POI 3.9.
Como los últimos tarros Apache POI 3.11 no son paquetes:¿Cuál es la mejor manera de hacer que POI funcione en OSGi?
Intenté dos enfoques:
incrusta los frascos directamente en el único paquete que los usaráuse frascos de PDI preenvasados como paquetesEstoy desesperado por reunir todas las dependencias.
Primero acerca de incrustar el jar POI en mi paquete: mi archivo bndtools contiene
-buildpath: \
...
libs/dom4j-1.6.1.jar;version=file,\
libs/poi-3.11.jar;version=file,\
libs/poi-ooxml-3.11.jar;version=file,\
libs/poi-ooxml-schemas-3.11.jar;version=file
Private-Package: \
...
org.openxmlformats.schemas.*,\
org.apache.poi.*,\
org.dom4j.*,\
com.microsoft.schemas.office.x2006.*,\
schemaorg_apache_xmlbeans.*,\
schemasMicrosoftComOfficeExcel.*,\
schemasMicrosoftComOfficeOffice.*,\
schemasMicrosoftComVml.*
Esto da como resultado un paquete que importa muchas, muchas cosas como por ejemploorg.bouncycastle.asn1.x509
yorg.junit
. No planeo encriptar o probar en mi aplicación, por lo que estos dos son probablemente "opcionales". ¿Cómo puedo especificar esto? ¿Hay una buena manera de recopilar todas estas dependencias?
Nota: al menosorg.apache.commons.codec
ycom.sun.msv.datatype.xsd.lib
se requieren adicionalmente, pero ya son paquetes.
Usando frascos preenvasados, intenté usarorg.apache.servicemix.bundles.poi
3.9_2. Esto también requieredom4j
así que usé el preenvueltoorg.apache.servicemix.bundles.dom4j
pero eso requiere al menos la versión 1.0 dejavax.xml.stream
que mi JVM / Felix OSGi anuncia como versión "única"0.0.0.1_007_JavaSE
. Lo arreglé a mano (feo), pero luego me quedé atascado en otra dependencia.
¿Cuál es el buen camino?