Как использовать директивы bnd из maven-bundle-plugin?

Как я могу использовать инструкцию директивы bnd из maven-bundle-plugin? Директивы bnd начинаются с символа '-', и это недопустимый тег xml:

<-foo>bar</-foo>

Я проверил официальную страницу maven-bundle-plugin, и они сказали, что она также должна начинаться с символа '-':

Директивы - любая инструкция, начинающаяся с символа "-", считается директивой, которая информирует BND о выполнении специальной обработки и не копируется в манифест.

Кажется, что описание цели пакета также не содержит этой информации. выполнить некоторую специальную обработку и не копируется в манифест.

2 ответа

Решение

Замените символ "-" на символ "_". Это будет работать:

<_foo>bar</_foo>

На самом деле это смутно описано на странице FAQ:

(это <_exportcontents> в POM, потому что тег не может начинаться с '-')

Это улучшение также можно найти в их трекере.

Существует альтернативный способ определения инструкций 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 и файл osgi.bnd.

Другие вопросы по тегам