Как определить источник версии пакета в манифесте, сгенерированном maven-bundle-plugin

Я создаю пакет OSGI из модуля Maven с использованием плагина maven-bundle-plugin.

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <configuration>
        <instructions>
            <Import-Package>
                *
            </Import-Package>
            <Export-Package>
                my.bundle.packages
            </Export-Package>
        </instructions>
    </configuration>
</plugin>

К сожалению, существует зависимость, которая предоставляет javax.annotation. Из-за этого сгенерированный манифест содержит Import-Package: javax.annotation;version="[3.2,4)"

Как узнать, какая зависимость экспортирует этот пакет? Используя mvn dependency:list, я смог исключить несколько зависимостей (com.google.code.findbugs:annotations и com.google.code.findbugs:jsr305), но диапазон версий остался. Я искал в файлах манифеста прямые зависимости, но не нашел другого файла jar, экспортирующего javax.annotation.

Примечание. Я мог бы добавить зависимость к javax.annotation:com.springsource.javax.annotation, и манифест правильно импортировал бы javax.annotation версии 1.0.0, но в этом нет необходимости, и лично мне было бы чище исключить неизвестная зависимость.


person TomVW    schedule 12.12.2016    source источник
comment
Какая банка зависимостей содержит пакет javax.annotations?   -  person Christian Schneider    schedule 12.12.2016
comment
Ни один из них этого не делает, но может быть вложенная зависимость. Этот пакет является частью jdk, и во время выполнения развертывается springsource-bundle.   -  person TomVW    schedule 12.12.2016
comment
Диапазон импорта 3.x может указывать на Spring, если вы используете Spring 3.x. Можете ли вы опубликовать свой контент pom?   -  person Christian Schneider    schedule 12.12.2016
comment
Я не использую Spring 3.x. POM просто содержит список зависимостей и плагин выше   -  person TomVW    schedule 12.12.2016
comment
версия может быть вызвана версией пакета, если версия пакета не указана. Вы можете переопределить версию с помощью ‹Import-Package›javax.annotation;version=0,*‹/Import-Package›   -  person Peter Kriens    schedule 12.12.2016
comment
На самом деле, я могу заставить его, но я не должен.   -  person TomVW    schedule 13.12.2016


Ответы (1)


Как узнать, какая зависимость экспортирует этот пакет?

Если у вас установлена ​​консоль *nix и инструмент командной строки bnd, вы можете попробовать:

mvn dependency:build-classpath | grep jar | tr ':' ' ' | xargs bnd find -e 'javax.annotation'

Вероятно, есть лучший способ сделать это, но это отправная точка

person Milen Dyankov    schedule 12.12.2016
comment
В некотором смысле это было полезно. Зависимости, которые я определил ранее, являются единственными, которые раскрывают этот пакет. Однако в манифесте по-прежнему указана неверная версия. - person TomVW; 12.12.2016
comment
Оказывается, я не могу правильно прочитать манифест. Эта команда помогла мне найти проблемные зависимости и перечислила банки, которые выставляют пакет. - person TomVW; 13.12.2016