使用maven bundle插件进行osgi开发并设置依赖项

时间:2012-07-13 22:23:44

标签: java maven osgi bundle

我正在使用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之间使用依赖项?

谢谢

2 个答案:

答案 0 :(得分:1)

maven bundle插件使用了封面下的bnd,它使用字节码分析从编译后的代码中追溯计算导入。包导出更像是一种设计,这就是为什么需要明确指定它们。

您可以查看目标文件夹中生成的清单,我建议您确保清楚地知道您的目标是什么。

答案 1 :(得分:1)

您必须将maven依赖项设置为您需要的所有包。这对于maven中的编译步骤是必需的。然后封面下的maven bundle插件或bnd将分析构建结果。它会自动检测您提供的所有包并导出它们,除非它们中有一些名称如impl。它还会检测您导入的所有包,并为它们创建Import-Package语句。因此,在大多数情况下,您不必配置导入和导出。所以只需将它们留空并检查罐中的清单。只有在不正确的情况下,您才需要手动配置。如果配置其他导入,请不要忘记添加*。如果您忘记了这一点,则不会添加自动检测到的包,您必须手动指定所有通常不需要的包。