在OSGI中嵌入传递依赖

时间:2017-03-07 16:19:24

标签: java maven osgi maven-bundle-plugin

我有一个OSGI捆绑包,它依赖于第三方库,我不想在容器中部署该库,我宁愿将其嵌入我的捆绑包中。

当然,该库有自己的依赖项,我也想嵌入它们。

我正在使用Maven Bundle Plugin

<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
   <configuration>
     <instructions>
        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
        <Bundle-Description>${project.description}</Bundle-Description>
        <Bundle-Vendor>${bundle.vendor}</Bundle-Vendor>
        <Meta-Persistence>...</Meta-Persistence>
        <Export-Package>...</Export-Package>
        <Import-Package>...</Import-Package>
        <Embed-Dependency>3rd-Party</Embed-Dependency>                      
        <Embed-Transitive>true</Embed-Transitive>
      </instructions>
    </configuration>
</plugin>

因此,3rd-Party嵌入在生成的包中,但不包含其传递依赖关系,就好像<Embed-Transitive>true</Embed-Transitive>没有任何效果一样。

所以我有一些问题

  • 这是以传递方式嵌入第三方库的正确方法吗?
  • 这是否会处理生成的Manifest文件(不导入属于第三方库及其依赖项的包)?

谢谢

1 个答案:

答案 0 :(得分:1)

关于嵌入依赖性:如果你看一下felix docs,他们总是使用像;scope=compile|runtime这样的范围。

也许依赖包的名称也必须符合给定的正则表达式。如果你想嵌入大部分的罐子而只省略一些,你可以嵌入*然后用!来排除一些....

关于清单:maven bundle插件应该注意使导入适应嵌入式软件包。所以不应该为嵌入的包导入。