如何使用来自 maven-bundle-plugin 的 bnd 指令?

Posted

技术标签:

【中文标题】如何使用来自 maven-bundle-plugin 的 bnd 指令?【英文标题】:How to use bnd directives from maven-bundle-plugin? 【发布时间】:2013-07-01 03:38:01 【问题描述】:

如何使用来自 maven-bundle-plugin 的 bnd 指令指令? bnd 指令以“-”字符开头,这是一个无效的 xml 标记:

<-foo>bar</-foo>

我检查了 official page 的 maven-bundle-plugin,他们说它也应该以“-”字符开头:

指令 - 任何以“-”字符开头的指令都被认为是通知 BND 执行某些特殊处理的指令,并且不会复制到清单中。

bundle goal description 似乎也没有此信息。 执行一些特殊处理并且不会复制到清单中。

【问题讨论】:

【参考方案1】:

将“-”字符替换为“_”字符。这将起作用:

<_foo>bar</_foo>

其实在FAQ页面里有模糊的描述:

(这是 POM 中的 <_exportcontents>,因为标签不能以 '-' 开头)

这个improvement 也可以在他们的问题跟踪器中找到。

【讨论】:

【参考方案2】:

还有一种替代方法可以定义 bnd 指令,减少 xml 混乱:

像这样配置插件:

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <extensions>true</extensions>
    <configuration>
        <instructions>
            <_include>-osgi.bnd</_include>
        </instructions>
    </configuration>
</plugin>

并提供包含说明的文件(此处为:osgi.bnd),例如

 Import-Package: !javax.servlet,\
  !org.apache.avalon.framework.logger,\
  org.apache.commons.collections;version="[1.0,2)",\
  org.apache.commons.collections.comparators;version="[1.0,2)",\
  org.apache.commons.collections.keyvalue;version="[1.0,2)",\
  org.apache.commons.collections.list;version="[1.0,2)",\
  org.apache.commons.collections.set;version="[1.0,2)",\
  !org.apache.log,\
  !org.apache.log4j,\
  *
 Export-Package: *

备注:文件名前的_include标签中有减号!

一个真实的例子可以在这里找到:

pom.xml file 和 osgi.bnd file。

【讨论】:

其实我现在正在使用这个。问题是,-include 本身就是一个 bnd 指令。因此问题。有帮助就加起来。

以上是关于如何使用来自 maven-bundle-plugin 的 bnd 指令?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用社交框架呈现来自 SKscene 的 UIViewController?

如何知道请求是不是来自缓存或不使用 AFNetworking

如何使用 jQuery 显示来自 JSON 的多个数组?

如何使用来自 API 的 JSON 填充选择列表?

如何使用 RestTemplate 在 Spring MVC 应用程序中访问来自(来自 Spring RESTful 服务)的巨大 JSON

如何使用来自passportjs的会话