我正在尝试使用maven-bundle-plugin的功能将一些JAR嵌入到单个OSGi包中
令我担心的是,所有嵌入式JAR包都放入生成的MANIFEST.MF的Import-Package头中.
如果我明确指定只使用我需要的包,如下面的代码片段所示:
Import-Package: org.osgi.framework
Run Code Online (Sandbox Code Playgroud)
构建失败并出现BND错误(未解析的引用).
所以,这里的问题是如何使用我需要的"Import-Package"标头构建带有嵌入式JAR的bundle?
您的类中导入的所有包都将由bnd导入.也许您不希望导入这些包,因为您知道在运行时您不需要它们.如果您无法阻止bnd导入它们,则可以将它们设置为可选,这样即使它们不是由另一个捆绑包提供(在有线时间),您的捆绑仍将解析.尝试添加:
<Import-Package>*;resolution:=optional<Import-Package>
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
您需要列出foo.jar和other.jar导入/使用的类,但除非您实际导出它们,否则不需要列出foo.jar或other.jar中的任何包.
归档时间: |
|
查看次数: |
17454 次 |
最近记录: |