【问题标题】:Embedding Transitive Dependencies in OSGI在 OSGI 中嵌入传递依赖
【发布时间】:2017-07-27 22:48:53
【问题描述】:

我有一个依赖于第 3 方库的 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 被嵌入到生成的包中,但不是它的传递依赖项,好像&lt;Embed-Transitive&gt;true&lt;/Embed-Transitive&gt; 没有任何效果。

所以我有一些问题

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

谢谢

【问题讨论】:

  • 你解决了吗?
  • 如果我没记错的话,没有。这也是我停止使用 OSGI 的原因之一
  • 您发现问题了吗?我在这里遇到了同样的问题:stackoverflow.com/questions/58457282/…。仍在寻找解决方案。
  • 不,因此我放弃了 OSGI,不值得麻烦

标签: java maven osgi maven-bundle-plugin


【解决方案1】:

关于嵌入依赖:如果您查看felix docs,它们总是使用类似;scope=compile|runtime 的范围。

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

关于 Manifest:maven bundle 插件应该负责调整导入以适应您的嵌入式包。所以嵌入的包不应该有导入。

【讨论】:

  • 你好 Christian,所以你认为指定 3rd-Party 库的确切名称有问题?
  • 对于嵌入的包的导入,当我嵌入依赖项时,导入包的列表增长非常快,我认为插件没有处理这个
  • 许多库的一个大问题是它们使用了很多可选的依赖项。如果您只是嵌入这样的库,那么您还可以获得可选的 deps。这样的树可以长得很快。如果您是这种情况,并且您知道不需要某些可选的 deps,那么您可以尝试在 maven 中排除它们。
猜你喜欢
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
  • 2012-10-09
  • 2014-10-02
  • 2019-12-29
  • 2021-07-05
  • 2014-11-20
  • 2017-03-11
相关资源
最近更新 更多