【发布时间】:2015-07-01 18:52:02
【问题描述】:
我想在 OSGi 中使用 Apache POI 来编写带有流式 OOXML API (SXSSF) 的 Excel 工作簿。流式处理 API 从 POI 3.9 开始可用。
由于最新的 Apache POI 3.11 jar 不是捆绑包:让 POI 在 OSGi 中工作的最佳方式是什么?
我尝试了两种方法:
- 将 jar 直接嵌入到将使用它们的唯一包中
- 使用预先打包成包的 POI jar
我对将所有依赖项放在一起感到绝望。
首先关于在我的包中嵌入 POI jar:我的 bndtools 文件包含
-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.*
这会导致一个包导入很多很多东西,例如org.bouncycastle.asn1.x509 和org.junit。我不打算在我的应用程序中加密或测试 - 所以这两个可能在某种程度上是“可选的”。我该如何指定?有没有收集所有这些依赖项的好方法?
注意:至少还需要 org.apache.commons.codec 和 com.sun.msv.datatype.xsd.lib,但它们已经是捆绑包。
使用预包装的罐子,我尝试使用org.apache.servicemix.bundles.poi 3.9_2。这也需要dom4j,所以我使用了预包装的org.apache.servicemix.bundles.dom4j,但这至少需要javax.xml.stream 的1.0 版本,我的JVM/Felix OSGi 将其宣传为“唯一”版本0.0.0.1_007_JavaSE。我手动修复了这个(丑陋的),但后来卡在了另一个依赖项上。
有什么好办法?
【问题讨论】:
-
你在正确的轨道上,坚持下去 :-) servicemix 包已经准备好 OSGi,如果这需要更多的依赖项,也安装它们。对于 javax.xml.stream,您还可以查找相应的包。您还缺少哪些其他依赖项?
-
在运行时,它找不到 poi-ooxml-schemas 中的类。有捆绑包吗?同时我尝试嵌入它,但 v.3.9 没有所有必需的类(缺少一些 ...math 包)
标签: java dependencies osgi apache-poi bndtools