Ошибки при использовании maven-bundle-plugin Embed-Dependency - PullRequest
0 голосов
/ 24 июня 2011

У меня есть проект Maven, который прекрасно работает, и я пытаюсь добавить ссылку на twitter4j.

Поэтому я добавляю это в pom:

    <dependency>
        <groupId>org.twitter4j</groupId>
        <artifactId>twitter4j-core</artifactId>
        <version>[2.2,)</version>
        <type>jar</type>
        <optional>false</optional>
        <scope>compile</scope>
    </dependency>

Когда я собираю(mvn clean install) Я получаю:

[ERROR] Error building bundle net.stevex.tweetfetcher:tweetfetcher-bundle:bundle:1.0-SNAPSHOT : Unresolved references to [twitter4j] by class(es) on the Bundle-Classpath[Jar:dot]: [net/stevex/tweetfetcher/impl/TweetFetcherImpl.class]

Это имеет смысл .. пакет twitter4j не включен в комплект.Поэтому я добавляю Embed-Dependency к инструкциям maven-bundle-plugin:

<Embed-Dependency>*;scope=compile|runtime</Embed-Dependency> 

И теперь, когда я строю, я получаю:

[ERROR] Error building bundle net.stevex.tweetfetcher:tweetfetcher-bundle:bundle:1.0-SNAPSHOT : Unresolved references to [dalvik.system, javax.crypto, javax.crypto.spec, javax.management, javax.management.openmbean, org.apache.commons.logging, org.apache.log4j, org.slf4j.impl, twitter4j.internal.http.alternative] by class(es) on the Bundle-Classpath[Jar:dot, Jar:twitter4j-core-2.2.3.jar]: [twitter4j/internal/logging/CommonsLoggingLogger.class, twitter4j/internal/logging/Log4JLoggerFactory.class, twitter4j/auth/OAuthToken.class, twitter4j/internal/http/HttpClientFactory.class, twitter4j/auth/OAuthAuthorization.class, twitter4j/internal/logging/Log4JLogger.class, twitter4j/conf/ConfigurationBase.class, twitter4j/TwitterAPIMonitor.class, twitter4j/internal/logging/CommonsLoggingLoggerFactory.class, twitter4j/management/APIStatisticsOpenMBean.class, twitter4j/internal/logging/Logger.class]

Я не понимаю, почемуКлассы twitter4j отсутствуют, и я не понимаю ссылки на dalvik.system, javax.crypto и т. д. Что здесь не так?

1 Ответ

3 голосов
/ 24 июня 2011

Проблема в том, что проекту twitter4j требуются все пакеты, перечисленные в списке ошибок. При использовании он не включает в себя все транзитивные зависимости. Для maven-bundle-plugin есть инструкция Embed Transitive, которая будет встраивать все переходные зависимости

<Embed-Dependency>*;scope=compile|runtime</Embed-Dependency> 
<Embed-Transitive>true</Embed-Transitive>

Однако этот вид поражает цель OSGi. Это оставляет вам два варианта, о которых я знаю:

  1. Поиск пакетов в секунду в SpringSource EBR . Вы просто вводите имя пакета в поле поиска, и результаты будут включать XML для вашего файла POM. Пакеты SpringSource будут включать ссылки на другие пакеты в EBR, что устраняет проблему транзитивных зависимостей.

  2. Используйте цель bundle-all модуля maven-bundle-plugin. Эта цель будет запускать плагин maven bundle для каждой зависимости вашего проекта и помещать полученные пакеты в ваш целевой каталог. Затем вы можете установить эти пакеты в ваш локальный репозиторий.

Я бы порекомендовал использовать опцию 1 для максимально возможного количества пакетов, а затем по умолчанию использовать опцию 2, когда SpringSource их не имеет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...