首页 文章

OSGi捆绑导入包和嵌入依赖项

提问于
浏览
1

我遇到了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等 .

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

1 回答

  • 0

    您使用的包使用“resolution:= optional”导入这些包 . 由于这个原因,可以在没有OSGi容器中的依赖项的情况下解析原始包 .

    我想当你嵌入依赖项时,maven-bundle-plugin分析了嵌入式依赖项的字节码而不是MANIFEST头 . 导入的包没有“resolution:= optional”指令 . 您可以在maven-bundle-plugin的配置中再次指定它,如下所示:

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

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

相关问题