2017-03-07 78 views
1

我有一个OSGI包,它依赖于第三方库,我不想在容器中部署该库,我宁愿将它嵌入到我的包中。在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

关于嵌入-相关性:如果你看看在felix docs他们总是用一个范围,如:;scope=compile|runtime

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

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

+0

Hello Christian,所以你认为指定第三方库的确切名称存在问题? – isco

+0

至于嵌入的软件包的导入,当我嵌入依赖关系时,导入的软件包列表增长非常快,我认为这个插件没有处理这个问题 – isco

+0

许多库的一个大问题是它们使用了很多可选依赖。如果你只是简单地嵌入这样一个库,那么你也可以得到可选的代码。这样的树可以长得很快。如果这是你的情况,你知道你不需要一些可选的代价,那么你可以尝试在maven中排除它们。 –