【问题标题】:OSGi bundles Import Packages and Embed DependenciesOSGi 捆绑导入包和嵌入依赖项
【发布时间】:2014-11-20 11:49:57
【问题描述】:

我在使用 OSGi 捆绑项目时遇到如下问题:

我有需要使用 JDOM 的类。当我将 JDOM 作为单独的包部署时,我目前的项目工作正常。该捆绑包导出以下包:

org.jdom,version=1.0.0
org.jdom.adapters,version=1.0.0
org.jdom.filter,version=1.0.0
org.jdom.input,version=1.0.0
org.jdom.output,version=1.0.0
org.jdom.transform,version=1.0.0
org.jdom.xpath,version=1.0.0

现在我想更改项目,以便将 JDOM 作为嵌入依赖项包含在内。为此,我将依赖项添加到我的 pom 文件中,并在 maven-bundle-plugin 配置中设置以下内容:

<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
    <instructions>
        <Bundle-SymbolicName>com.qnx.aem.cloudsite-bundle</Bundle-SymbolicName>
            <Embed-Transitive>true</Embed-Transitive>
            <Embed-Dependency>jdom</Embed-Dependency>
    </instructions>
</configuration>
</plugin>

之后,当我查看我们的项目捆绑清单时,我看到一堆新的导入包需要 JDOM jar 的依赖项:jaxen、xerces 等。

先前部署的 JDOM 的 OSGi 包究竟是如何解决这些相同的依赖关系的?它们从未在包导入包中列出?此外,如果我尝试将这些作为项目的依赖项包含在内并嵌入它们只会使问题更加复杂。救命!

【问题讨论】:

标签: osgi jcr aem osgi-bundle crx


【解决方案1】:

您使用的捆绑包以“分辨率:=可选”导入这些包。由于这个原因,原始捆绑包可以在没有 OSGi 容器中的依赖项的情况下解析。

我猜当您嵌入依赖项时,maven-bundle-plugin 分析了嵌入依赖项的字节码而不是 MANIFEST 标头。包的导入没有“分辨率:=可选”指令。您可以像这样在 maven-bundle-plugin 的配置中再次指定它:

<Import-Package>
    org.jaxen.*;resolution:=optional,
    *
</Import-Package>

问题是:为什么要嵌入一个已经是工作 OSGi 包的 jar?最好按原样使用。

【讨论】:

    猜你喜欢
    • 2018-10-24
    • 2015-10-04
    • 2015-03-12
    • 2017-09-10
    • 2015-12-14
    • 2018-08-23
    • 2013-02-28
    • 2022-01-23
    • 2013-11-02
    相关资源
    最近更新 更多