首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在OSGi中使用Apache

如何在OSGi中使用Apache
EN

Stack Overflow用户
提问于 2015-04-23 14:07:21
回答 2查看 4K关注 0票数 3

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

由于最新的ApachePOI3.11JAR不是包:,让POI在OSGi中工作的最佳方法是什么?

我尝试了两种方法:

  1. 将jars直接嵌入到将使用它们的唯一包中。
  2. 使用预包装成包的POI jars

我正在绝望地把所有的依赖联系在一起。

首先,将POI嵌入到我的包中:我的bndtools文件包含

代码语言:javascript
复制
-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,但它们已经是包了。

使用预包装的jars,我尝试使用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。我用手(丑)解决了这个问题,但后来又陷入了另一个依赖。

有什么好办法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-24 08:37:51

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

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

请注意,任何可选的Maven依赖项在默认情况下都不会包括在内,如果您需要这些依赖项,则必须手动添加到构建中(由于分级限制)。

票数 3
EN

Stack Overflow用户

发布于 2018-05-09 17:17:13

我没有关于这项工作的工作示例,但这些文档可能会对您有所帮助。

POI可以和OSGI一起使用吗?

从POI 3.16开始,OSGIs上下文类加载器处理有一个解决方案,即用有限类视图的实现替换当前的线程上下文类加载器。这将导致IllegalStateExceptions,因为xmlbean无法在这个简化的视图中找到xml定义。解决方法是初始化POIXMLTypeLoader的类加载器委托,该委托默认为当前线程上下文类加载器。初始化应该在任何其他与OOXML相关的调用之前进行。示例中的类可以是任何类,它是poi-ooxml-schema或ooxml-schema: POIXMLTypeLoader.setClassLoader(CTTable.class.getClassLoader());的一部分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29825944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档