【问题标题】:Plans to support "Require-Bundle" in maven-bundle-plugin计划在 maven-bundle-plugin 中支持“Require-Bundle”
【发布时间】:2015-02-20 11:28:31
【问题描述】:

是否有计划在 maven-bundle-plugin 中支持“Require-Bundle”,即使它不是推荐的 OSGi 方式。在某些情况下使用“Require-Bundle”是有意义的,例如合并拆分包。

【问题讨论】:

    标签: maven osgi maven-bundle-plugin


    【解决方案1】:

    您可以在说明中指定 Require-Bundle MANIFEST 标头。例如:

    <instructions>
        <Require-Bundle>a.b.c</Require-Bundle>
    </instructions>
    

    但是,所需捆绑包的版本范围不会自动附加,因此如果需要,您必须手动指定。

    【讨论】:

    • 但是依赖关系不会自动解析,因为它与导入包模式 *.对吗?
    • 在拆分包的情况下,Require-Bundle 中包的顺序很重要。 Bnd 无法自动决定哪个 Bundle 应该在顺序中排在第一位。此外,bnd 应该分析每个方法调用以确定是否足以导入一个包,因为它仅从一个包中使用,或者是否需要使用 Require-Bundle。由于这个问题太复杂,无法自动提供一些答案(如捆绑的顺序),您必须手动维护此 HEADER。但是,最好的办法是完全避免使用 Require-Bundle。
    • 感谢您的回答。但是进口情况不一样吗?顺序更重要,您实际上根本无法合并包?!我也不明白为什么订单对 require-bundle 很重要
    • Import-Package 的顺序无关紧要,因为同一个包(不同版本)不能导入两次。使用 Require-Bundle,可以从多个包中导入同一个包,并且这些包可以包含相同的类。在这种情况下,搜索类时的顺序很重要。如果您有依赖项并且多个依赖项包含相同的包,则 bnd 会采用第一个并基于它生成 Import-Package。如果它想生成 Require-Bundle,它不知道在这种情况下是应该使用 Require-Bundle 还是 Import-Package。
    【解决方案2】:

    Require-Bundle 受 bundle-plugin 支持,就像所有 OSGi 标头以及您想要使用的任何其他任意标头一样。只需将它们写入 XML:

    <Require-Bundle>
        org.example.foo; bundle-version=3.0,
        org.example.bar; bundle-version=1.0
    </Require-Bundle>
    <My-Extension-Header>
        blah blah blah
    </My-Extension-Header>
    

    【讨论】:

      猜你喜欢
      • 2013-11-15
      • 2018-05-24
      • 2011-06-18
      • 1970-01-01
      • 2011-05-21
      • 2013-02-10
      • 1970-01-01
      • 2015-11-23
      • 2016-07-11
      相关资源
      最近更新 更多