如何使用来自 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
如何使用 RestTemplate 在 Spring MVC 应用程序中访问来自(来自 Spring RESTful 服务)的巨大 JSON