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

cei*_*ors 4 osgi maven bnd maven-bundle-plugin

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

<-foo>bar</-foo>
Run Code Online (Sandbox Code Playgroud)

我已经检查了maven-bundle-plugin 的官方页面,他们说它应该以' - '字符开头:

指令 - 任何以" - "字符开头的指令都被视为指示BND执行某些特殊处理而不会复制到清单的指令.

包目标的描述似乎并不具备这种信息也是如此.执行一些特殊处理并且不会复制到清单.

cei*_*ors 8

将' - '字符替换为'_'字符.这将有效:

<_foo>bar</_foo>
Run Code Online (Sandbox Code Playgroud)

它实际上在FAQ页面中含糊不清地描述:

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

这种改进也可以在他们的问题跟踪器中找到.


eva*_*dor 5

有一种替代方法可以使用更少的xml杂乱来定义bnd指令:

像这样配置插件:

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <extensions>true</extensions>
    <configuration>
        <instructions>
            <_include>-osgi.bnd</_include>
        </instructions>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

并提供一个文件(这里: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: *
Run Code Online (Sandbox Code Playgroud)

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

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

pom.xml文件osgi.bnd文件.