OSGI:是否可以使用Import-package并添加可见性:= reexport?

时间:2010-08-16 04:51:30

标签: osgi

我想在清单中导入一个包而不是需要bundle,并且所有需要前一个包的bundle都会继承导入的包。我假设可以设置可见性:reexport,但是如果我有这个选项,Eclipse不会抱怨......

5 个答案:

答案 0 :(得分:5)

这是不可能的,也没有必要。使用Import-Package的bundle可以简单地从导出它的原始bundle中获取包;没有必要通过中间包“路由”依赖关系。

这是Import-Package的最大优势之一:导入包既不知道也不关心从中获取包的其他包。

答案 1 :(得分:4)

您只能在需要捆绑时重新出口。

Import-Package应优先于Require-Bundle或DynamicImport-Package。如果你必须处理拆分包,那么前者才是真正必要的,而后者只是为了解决你事先不知道类名的情况(例如类似SPI的情况),尽管它也可以安全地用作一个可选的类似导入工具。通常,您应该避免隐藏依赖项(例如,广泛的动态导入)或模糊它们(例如,需要捆绑包)的内容。 Require-Bundle支持重新导出的事实是一个应该从未做过的决定,并且这个功能没有合理的用例,它只是进一步模糊了依赖关系并造成了混乱。

答案 2 :(得分:1)

不,不可能重新出口包裹。为此,您需要使用捆绑或不同的类加载策略。

答案 3 :(得分:0)

我显然错过了“回复评论”链接,所以请原谅我在这里的评论中回答了这个问题...

你是否处于“等级”状态并不会产生任何影响。第一个包在不同的上下文中使用,因此它们不会总是在知道他们想要的容器中使用。其次,bundle仍然没有在“层次结构”中使用它可用的所有东西,所以它的行为只会导致依赖扇出,因为真正的依赖是隐藏的。

答案 4 :(得分:-1)

我不确定你的问题是什么。如果您不想要捆绑包,则必须导入所需的所有包。要生成此列表,您可以使用maven-bundle-plugin(对于maven项目)。如果您不想生成所需导入的具体列表,那么您可以尝试

DynamicImport-Package: *

应该按需导入所需的包。