我正在使用maven(maven-bundle-plugin)和apache karaf在osgi bundle开发中迈出第一步。 我的问题是:我如何导入另一个包的包?
如果我有两个捆绑包A和B. 让我们说Bundle A导出一个包“package.from.bundle.A”。 我可以在Bundle A Project的pom.xml中声明:
...
<instructions>
...
<Export-Package>
package.from.bundle.A*;version=${project.version}
</Export-Package>
<Import-Package>
*
</Import-Package>
</instructions>
...
但是我怎么能声明我想在Bundle B中使用那个包呢? 如果我只是在项目B的pom文件的import-package标签之间编写packagename,这不起作用......
...
<instructions>
...
<Export-Package>
</Export-Package>
<Import-Package>
package.from.bundle.A
</Import-Package>
</instructions>
...
maven如何知道此软件包与哪个软件包项目相关?如何使用maven在我的bundle之间使用依赖项?
谢谢
答案 0 :(得分:1)
maven bundle插件使用了封面下的bnd,它使用字节码分析从编译后的代码中追溯计算导入。包导出更像是一种设计,这就是为什么需要明确指定它们。
您可以查看目标文件夹中生成的清单,我建议您确保清楚地知道您的目标是什么。
答案 1 :(得分:1)
您必须将maven依赖项设置为您需要的所有包。这对于maven中的编译步骤是必需的。然后封面下的maven bundle插件或bnd将分析构建结果。它会自动检测您提供的所有包并导出它们,除非它们中有一些名称如impl。它还会检测您导入的所有包,并为它们创建Import-Package语句。因此,在大多数情况下,您不必配置导入和导出。所以只需将它们留空并检查罐中的清单。只有在不正确的情况下,您才需要手动配置。如果配置其他导入,请不要忘记添加*。如果您忘记了这一点,则不会添加自动检测到的包,您必须手动指定所有通常不需要的包。