在 OSGI 中嵌入传递依赖

isc*_*sco 5 java osgi maven 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>
Run Code Online (Sandbox Code Playgroud)

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

所以我有一些问题

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

谢谢

Chr*_*der 1

关于嵌入依赖:如果您查看felix 文档,他们总是使用如下范围:;scope=compile|runtime

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

关于清单:maven 包插件应该负责将导入调整为嵌入的包。因此,不应导入嵌入的包。