Java 避免两个不同罐中相同包装的冲突
我开发了一个五罐的OSGI包Java 避免两个不同罐中相同包装的冲突,java,osgi,osgi-bundle,Java,Osgi,Osgi Bundle,我开发了一个五罐的OSGI包 poi-3.9 - bundle name:- org.apache.poi poi-ooxml-3.9- bundle name:- org.apache.poi.ooxml poi-ooxml-schemas dom4j xmlbeans 但是当我使用这些罐子时,它会给出一个错误 NoClassDef found org.apache.poi.ss.usermodel.WorkbookFactory 然后我在中实现了一些包(比如org.apache.poi
poi-3.9 - bundle name:- org.apache.poi
poi-ooxml-3.9- bundle name:- org.apache.poi.ooxml
poi-ooxml-schemas
dom4j
xmlbeans
但是当我使用这些罐子时,它会给出一个错误
NoClassDef found
org.apache.poi.ss.usermodel.WorkbookFactory
然后我在中实现了一些包(比如org.apache.poi.ss.usermodel)
它将给出相同的错误
我能做些什么来解决这个问题
清单文件
Bundle-ManifestVersion: 1
Bundle-Name: poi
Bundle-SymbolicName: org.apache.poi
Bundle-Version: 3.9
Bundle-Vendor: XYZ
Bundle-Localization: plugin
Import-Package: org.apache.poi.ss.usermodel
Export-Package: org.apache.poi,
org.apache.poi.common.usermodel,
org.apache.poi.ddf,
org.apache.poi.dev,
org.apache.poi.hpsf,
org.apache.poi.hpsf.extractor,
org.apache.poi.hpsf.wellknown,
org.apache.poi.hssf,
org.apache.poi.hssf.dev,
org.apache.poi.hssf.eventmodel,
org.apache.poi.hssf.eventusermodel,
org.apache.poi.hssf.eventusermodel.dummyrecord,
org.apache.poi.hssf.extractor,
org.apache.poi.hssf.model,
org.apache.poi.hssf.record,
org.apache.poi.hssf.record.aggregates,
org.apache.poi.hssf.record.cf,
org.apache.poi.hssf.record.chart,
org.apache.poi.hssf.record.common,
org.apache.poi.hssf.record.cont,
org.apache.poi.hssf.record.crypto,
org.apache.poi.hssf.record.pivottable,
org.apache.poi.hssf.usermodel,
org.apache.poi.hssf.util,
org.apache.poi.poifs.common,
org.apache.poi.poifs.crypt,
org.apache.poi.poifs.dev,
org.apache.poi.poifs.eventfilesystem,
org.apache.poi.poifs.filesystem,
org.apache.poi.poifs.nio,
org.apache.poi.poifs.property,
org.apache.poi.poifs.storage,
org.apache.poi.ss,
org.apache.poi.ss.extractor,
org.apache.poi.ss.format,
org.apache.poi.ss.formula,
org.apache.poi.ss.formula.atp,
org.apache.poi.ss.formula.constant,
org.apache.poi.ss.formula.eval,
org.apache.poi.ss.formula.eval.forked,
org.apache.poi.ss.formula.function,
org.apache.poi.ss.formula.functions,
org.apache.poi.ss.formula.ptg,
org.apache.poi.ss.formula.udf,
org.apache.poi.ss.usermodel,
org.apache.poi.ss.usermodel.charts,
org.apache.poi.ss.util,
org.apache.poi.ss.util.cellwalk,`enter code here`
org.apache.poi.util
第二舱单
Bundle-ManifestVersion: 1
Bundle-Name: poi.ooxml
Bundle-SymbolicName: org.apache.poi.ooxml
Bundle-Version: 3.9
Bundle-Vendor: xyz
Bundle-Localization: plugin
Require-Bundle: org.apache.poi.ooxml.schemas,
org.apache.poi.dom4j,
org.apache.poi.xmlbeans
Import-Package: org.apache.poi.ss.usermodel
Export-Package: org.apache.poi,
org.apache.poi.dev,
org.apache.poi.extractor,
org.apache.poi.openxml4j.exceptions,
org.apache.poi.openxml4j.opc,
org.apache.poi.openxml4j.opc.internal,
org.apache.poi.openxml4j.opc.internal.marshallers,
org.apache.poi.openxml4j.opc.internal.signature,
org.apache.poi.openxml4j.opc.internal.unmarshallers,
org.apache.poi.openxml4j.opc.signature,
org.apache.poi.openxml4j.util,
org.apache.poi.ss.usermodel,
org.apache.poi.util,
org.apache.poi.xslf,
org.apache.poi.xslf.extractor,
org.apache.poi.xslf.model,
org.apache.poi.xslf.model.geom,
org.apache.poi.xslf.usermodel,
org.apache.poi.xslf.util,
org.apache.poi.xssf.dev,
org.apache.poi.xssf.eventusermodel,
org.apache.poi.xssf.extractor,
org.apache.poi.xssf.model,
org.apache.poi.xssf.streaming,
org.apache.poi.xssf.usermodel,
org.apache.poi.xssf.usermodel.charts,
org.apache.poi.xssf.usermodel.extensions,
org.apache.poi.xssf.usermodel.helpers,
org.apache.poi.xssf.util,
org.apache.poi.xwpf.extractor,
org.apache.poi.xwpf.model,
org.apache.poi.xwpf.usermodel
首先:您真的需要将poi JAR转换为捆绑包吗?如果您只使用另一个bundle中的代码,那么明智的做法可能是将jar包含到该bundle中,并相应地调整bundle类路径。这可能会为您节省很多问题,特别是如果您不太熟悉如何将现有JAR转换为OSGi捆绑包
我快速查看了poi发行版,包的名称可能相同,但内容不同(拆分包)。这意味着这里最简单的选项是创建一个新的bundle jar,包括来自poi的所有类和来自发行版的poi ooxml jar。然后使用
导出包
标题导出该捆绑包中的所有包。请向我们提供清单's@verbose-模式添加了清单文件请确保在所有ex和导入中添加了版本号。某些包是否出口两次,例如从其他包?
Bundle-ManifestVersion: 1
Bundle-Name: poi.ooxml
Bundle-SymbolicName: org.apache.poi.ooxml
Bundle-Version: 3.9
Bundle-Vendor: xyz
Bundle-Localization: plugin
Require-Bundle: org.apache.poi.ooxml.schemas,
org.apache.poi.dom4j,
org.apache.poi.xmlbeans
Import-Package: org.apache.poi.ss.usermodel
Export-Package: org.apache.poi,
org.apache.poi.dev,
org.apache.poi.extractor,
org.apache.poi.openxml4j.exceptions,
org.apache.poi.openxml4j.opc,
org.apache.poi.openxml4j.opc.internal,
org.apache.poi.openxml4j.opc.internal.marshallers,
org.apache.poi.openxml4j.opc.internal.signature,
org.apache.poi.openxml4j.opc.internal.unmarshallers,
org.apache.poi.openxml4j.opc.signature,
org.apache.poi.openxml4j.util,
org.apache.poi.ss.usermodel,
org.apache.poi.util,
org.apache.poi.xslf,
org.apache.poi.xslf.extractor,
org.apache.poi.xslf.model,
org.apache.poi.xslf.model.geom,
org.apache.poi.xslf.usermodel,
org.apache.poi.xslf.util,
org.apache.poi.xssf.dev,
org.apache.poi.xssf.eventusermodel,
org.apache.poi.xssf.extractor,
org.apache.poi.xssf.model,
org.apache.poi.xssf.streaming,
org.apache.poi.xssf.usermodel,
org.apache.poi.xssf.usermodel.charts,
org.apache.poi.xssf.usermodel.extensions,
org.apache.poi.xssf.usermodel.helpers,
org.apache.poi.xssf.util,
org.apache.poi.xwpf.extractor,
org.apache.poi.xwpf.model,
org.apache.poi.xwpf.usermodel