gpt4 book ai didi

java - 如何在 OSGi 中使用 Apache POI

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:10:21 24 4
gpt4 key购买 nike

我想使用 OSGi 中的 Apache POI 编写一个带有流式 OOXML API (SXSSF) 的 Excel 工作簿。流式 API 从 POI 3.9 开始可用。

由于最新的 Apache POI 3.11 jar 不是 bundle :让 POI 在 OSGi 中工作的最佳方法是什么?

我尝试了两种方法:

  1. 将 jars 直接嵌入到将使用它们的唯一包中
  2. 使用预先包装好的 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.x509org.junit。我不打算在我的应用程序中加密或测试 - 所以这两个可能在某种程度上是“可选的”。我怎样才能指定这个?有没有一种收集所有这些依赖项的好方法?

注意:至少还需要 org.apache.commons.codeccom.sun.msv.datatype.xsd.lib,但它们已经是 bundle 。


使用预包装的 jar,我尝试使用 org.apache.servicemix.bundles.poi 3.9_2。这也需要 dom4j 所以我使用了预包装的 org.apache.servicemix.bundles.dom4j 但这至少需要 1.0 版的 javax.xml.stream,我的 JVM/Felix OSGi 宣传为“唯一”版本 0.0.0.1_007_JavaSE。我手动修复了这个(丑陋的),但后来陷入了另一个依赖。

有什么好的方法?

最佳答案

我们将 Gradle 与 bnd-platform 结合使用基于 Maven 依赖项为我们的应用程序构建 OSGi 包。不确定这是否是“好方法”,但这是我们为基于 OSGi 的应用程序构建目标平台的方式,Apache POI 是其中的一部分。在您必须对 bundle 进行调整(例如,使 JUnit 可选)或合并 JAR(例如,由于 OSGi 中的类加载问题)以使它们工作时,它特别有用。

我设置了一个 example build with an Apache POI bundle (隐含地,它的 POM 定义的依赖项)在 GitHub 上。您可以克隆它(sample-poi 分支)并尝试运行 ./gradlew clean bundles。创建的包将在 build/plugins 中。

请注意,默认情况下不会包含任何可选的 Maven 依赖项,如果您需要它们,则必须手动将它们添加到构建中(由于 limitations in Gradle)。

关于java - 如何在 OSGi 中使用 Apache POI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29825944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com