Как создать рабочий пакет OSGI для Apache POI 3.8? - PullRequest
6 голосов
/ 09 ноября 2011

Моя цель - создать документ Excel 2007 (XLSX) в среде RCP Eclipse (Excel 2003 прост). Я не хочу помещать фляги POI в папку / lib , вместо этого я хочу использовать рабочий OSI-пакет POI из моего определения цели.

Все мои попытки до сих пор не смогли создать работающий OSGI-пакет из POI 3.8 . Что я сделал до сих пор:

  • Я объединил все соответствующие файлы JAR с задачей Ant zip :

    • пои-3,8-beta3-20110606.jar
  • пои-OOXML-схемы-3,8-beta3-20110606.jar
  • пои-блокнотная-3,8-beta3-20110606.jar

Я запустил инструмент bnd с параметром wrap : java -jar biz.aQute.bnd.jar wrap ./poi-3.8-beta3-20110606-merged.jar

Мне пришлось отдельно упаковывать файлы jar в папку / ooxml-lib, используя bnd:

  • XMLBeans-2.3.0.jar
  • StAX-апи-1.0.1.jar
  • dom4j-1.6.1.jar

Это приводит к ClassNotFoundExceptions для org.w3c.dom.Node, поскольку xmlbeans-2.3.0.jar экспортирует четыре класса из этого пакета org.w3c.dom. Обычно JavaSE-RuntimeEnvironment экспортирует их.

Я удалил папку org/w3c/dom из xmlbeans-2.3.0.jar и восстановил jar-файл, но получил другие исключения ClassNotFoundException.

Это то, где я так далеко. Я думаю, что работы с bnd wrap недостаточно. Возможно, я должен создать файл bnd.properties и иметь явные операторы Export-Package / Import-Package, но какой из них работает?

Итак, кому-нибудь удалось создать рабочий пакет OSGI POI 3.8?

Ответы [ 4 ]

5 голосов
/ 09 ноября 2011

Если вам не нужна эта конкретная версия, просто используйте http://ebr.springsource.com/repository/app/bundle/version/detail?name=com.springsource.org.apache.poi&version=3.0.2.FINAL, на этой странице перечислены ее зависимости и т. Д. (Которую также можно загрузить или сослаться, если вы используете Maven / Ivy)

Может быть http://engroup.sourceforge.net/maven2/engroup/osgi/commons/poi-osgi/3.1/ или http://ebr.springsource.com/repository/app/search?query=poi может дать некоторое вдохновение (в первой ссылке есть maven POM, который перечисляет (bnd) инструкции в разделе плагина пакета).

ПочемуВы сливаете банки?Почему бы не попробовать обернуть каждый из них по отдельности?

Второе, что нужно попробовать, - это использовать существующие OSG-файлы jar xmlbeans , stax-api и dom4j

Также вы можете настроить то, что JRE (системный пакет) экспортирует, используя "org.osgi.framework.system.packages" - так что вы можете не экспортировать org.w3c.dom

1 голос
/ 25 августа 2012

Если вас интересует рабочий пример подхода с BND, вы можете взглянуть на этот проект, предоставив pom и bnd файл (вдохновленный ответом Jarek):

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

Запуск "mvn install" дает вам POI-файл со вкусом OSGi, который также можно найти здесь:

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

Возможно, вам придется немного поиграться с файлом bnd, чтобы он создал именно тот пакет OSGi, который вам нужен (возможно, вам не нужны все зависимости или вы хотите пометить их как необязательные).

Вы будетеНайдите всю необходимую документацию на домашней странице bnd.Я рекомендую начать с этой страницы , если вы еще не использовали этот замечательный инструмент.

1 голос
/ 27 июня 2012

Я не знаю о 3.8, но создать рабочий пакет OSGi для 3.7 довольно просто с 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
1 голос
/ 21 ноября 2011

Я смог сделать после серьезного удара головой.Вы можете увидеть файл POM здесь:

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

Мне пришлось перепаковать XMLBeans 2.3.0 и вставить в комплект.

Приветствия, Йогеш

...