繁体   English   中英

使用maven-bundle-plugin将JAR嵌入到OSGi包中

[英]Embedding JARs into the OSGi bundle with maven-bundle-plugin

我正在尝试使用maven-bundle-plugin的功能将一些JAR嵌入到单个OSGi包中

令我担心的是,所有嵌入式JAR包都放入生成的MANIFEST.MF的Import-Package头中。

如果我明确指定只使用我需要的包,如下面的代码片段所示:

Import-Package: org.osgi.framework

构建失败并出现BND错误(未解析的引用)。

所以,这里的问题是如何使用我需要的“Import-Package”标头构建带有嵌入式JAR的bundle?

您的类中导入的所有包都将由bnd导入。 也许您不希望导入这些包,因为知道在运行时您不需要它们。 如果您无法阻止bnd导入它们,您可以将它们设置为可选,这样即使它们不是由另一个捆绑包提供(在有线时间),您的捆绑仍将解析。 尝试添加:

<Import-Package>*;resolution:=optional<Import-Package>

在maven中你的maven bnd配置。

您在Import-Package标头中看到“意外”包的一个可能原因如下:

支持OSGi中的协作模型的一般良好做法是导入您导出的所有包 - 请参阅Peter Kriens的博客文章 ,详细解释原因。 Bnd(以及maven-bundle-plugin)默认遵循这种做法,并自动导入所有导出的包。 因此,您应首先检查Export-Package标头,并确保仅导出所需的包。

此外,如果您想从嵌入式依赖项导出包,那么您应该小心避免在包中复制 - 请参阅maven-bundle-plugin文档的Embed-Dependency和Export-Package部分。

如果要在包含JAR的包内提供类,例如,您应该使用Bundle-ClassPath

Bundle-ClassPath: foo.jar,other.jar
Import-Package: org.osgi.framework,org.other.imported

您需要列出foo.jar和other.jar导入/使用的类,但除非您实际导出它们,否则不需要列出foo.jar或other.jar中的任何包。

将JAR嵌入到捆绑包中时,可以从import-package范围中删除一些包:

<Import-Package>![package_name9]<Import-Package>

在pom.xml中或者如果使用外部* .bnd文件:

Import-Package: ![package_name]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM