OSGI导入软件包问题

时间:2019-02-20 16:33:17

标签: osgi eclipse-rcp osgi-bundle equinox

我对捆扎布线有好奇的行为。

我有一个包A,它需要javax.xml.bind。*包才能使用JAXB。 TargetPlatform包含软件包javax.xml.bind_2.2.0XXX.jar,该软件包将导出版本为2.2.0的那些软件包。

我使用Import-Package在包A清单中指定所需的包,并指定与导出的版本相同(即2.2.0)。

因此,我希望这些软件包是捆绑包javax.xml.bind.XXX.jar导出的软件包。

当我在JRE上运行需要Jar的代码时,这些代码不提供javax.xml.bind。*,一切正常。

当我在另一个不提供它们的JRE下运行时,则在JRE / rt.jar上有classCastException。

对于第二种情况,似乎使用了JRE中的类,而不是捆绑软件中的类。

如果我在必需的捆绑包上将捆绑包A清单更改为Require-Bundle,则一切正常。

当我使用控制台“ packages javax.xml.bind”命令查看提供该软件包的捆绑软件时,我得到了预期的结果(该软件包由系统捆绑软件和javax.xml.bind提供)。 / p>

如命令所示,系统捆绑包确实提供了版本0.0.0下的软件包,因此不应使用它。

有人对我错过了什么有任何线索吗?

[控制台结果]

  

将javax.xml.bind打包   osgi.wiring.package; bundle-symbolic-name:List =“ org.eclipse.osgi,system.bundle”; bundle-version:Version =“ 3.13.100.v20180827-1536”;版本:Version =“ 0.0.0”; osgi.wiring.package =“ javax.xml.bind”   osgi.wiring.package; bundle-symbolic-name =“ javax.xml.bind”; bundle-version:Version =“ 2.2.0.v201105210648”;版本:Version =“ 2.2.0”; osgi.wiring.package =“ javax.xml.bind”

[清单]

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Bundle-Name
Bundle-SymbolicName: com.indy.libraries;singleton:=true
Bundle-Version: 19.1.0.qualifier
Bundle-ClassPath: js.jar,
 saxon9.jar,
 saxon9-xpath.jar,
 xml-apis.jar,
 .,
 bsf.jar,
 resolver.jar,
 serializer.jar,
 xercesImpl.jar,
 commons-logging-1.1.jar,
 saxon9-sql.jar,
 saxon9-jdom.jar,
 saxon9-s9api.jar,
 ant.jar,
 ant-contrib-0.6.jar,
 ant-launcher.jar,
 ant-nodeps.jar,
 ant-trax.jar,
 trang.jar,
 lib/global/rmiio-2.0.2.jar
Export-Package: com.indy.libraries,
 com.thaiopensource.relaxng.input,
 com.thaiopensource.relaxng.output,
 com.thaiopensource.relaxng.translate,
 com.thaiopensource.relaxng.translate.util,
 com.thaiopensource.xml.sax,
 net.sf.saxon,
 net.sf.saxon.charcode,
 net.sf.saxon.codenorm,
 net.sf.saxon.event,
 net.sf.saxon.evpull,
 net.sf.saxon.expr,
 net.sf.saxon.exslt,
 net.sf.saxon.functions,
 net.sf.saxon.instruct,
 net.sf.saxon.java,
 net.sf.saxon.jdom,
 net.sf.saxon.number,
 net.sf.saxon.om,
 net.sf.saxon.pattern,
 net.sf.saxon.pull,
 net.sf.saxon.query,
 net.sf.saxon.regex,
 net.sf.saxon.s9api,
 net.sf.saxon.sort,
 net.sf.saxon.sql,
 net.sf.saxon.style,
 net.sf.saxon.sxpath,
 net.sf.saxon.tinytree,
 net.sf.saxon.trace,
 net.sf.saxon.trans,
 net.sf.saxon.tree,
 net.sf.saxon.type,
 net.sf.saxon.value,
 net.sf.saxon.xpath,
 org.apache.tools.ant,
 org.apache.tools.ant.types,
 org.apache.xml.serializer
Import-Package: com.ctc.wstx.stax;version="4.4.0",
 javax.xml.bind;version="2.2.0",
 javax.xml.bind.annotation;version="2.2.0",
 javax.xml.bind.annotation.adapters;version="2.2.0",
 org.codehaus.stax2;version="3.1.4",
 org.eclipse.core.resources,
 org.jdom;version="1.0.0",
 org.jdom.input;version="1.0.0"
Bundle-Vendor: %Bundle-Vendor
Require-Bundle: org.eclipse.ui,
 org.eclipse.core.runtime,
 com.indy.libraries.build;bundle-version="1.0.0",
 com.indy.libraries.engine;bundle-version="1.0.0";visibility:=reexport,
 com.indy.ui.custom.out;bundle-version="17.2.0"
Bundle-ActivationPolicy: lazy
Bundle-Activator: com.indy.libraries.LibrariesPlugin
Eclipse-RegisterBuddy: com.indy.libraries.build,
 com.indy.libraries.engine
Eclipse-ExtensibleAPI: true`enter code here`
Bundle-RequiredExecutionEnvironment: JavaSE-1.6

0 个答案:

没有答案