Пакет p2-maven-plugin конфликтует с другим существующим пакетом

Я начинаю использовать p2-maven-plugin , чтобы (надеюсь) удобно интегрировать в наш проект JAR-файлы, не относящиеся к OSGi.

У меня есть артефакт, который я хочу OSGi-ify, который называется com.thirdparty.artifact. Сейчас я использую p2-maven-plugin стандартная конфигурация, и я указываю свой артефакт в pom.xml так:

<artifact><id>com.thirdparty:artifact:1.2.3</id></artifact>

Этот артефакт имеет транзитивную зависимость com.thirdparty:library:2.5, которая экспортирует пакет com.thirdparty.library, который, в свою очередь, импортируется com.thirdparty:artifact. Когда я запускаю mvn p2:site, я получаю сайт P2, содержащий com.thirdparty:artifact:1.2.3 и com.thirdparty:library:2.5 - пока все в порядке.

Теперь все становится беспорядочно. Моя существующая целевая платформа уже содержит артефакт с именем com.othervendor:library (другой поставщик, он есть, и я не могу это изменить), который также экспортирует тот же самый пакет com.thirdparty.library (но совершенно другую версию).

Во время выполнения черная магия OSGi / Eclipse (которую я, вероятно, никогда полностью не пойму) пытается разрешить com.thirdparty:artifact зависимость от пакета com.thirdparty.library с помощью com.othervendor:library и не предоставленных мной com.thirdparty:library:2.5 - и я, очевидно, в беде. Вот визуализация моей ситуации:

StaightFromDependencyHell

Я не был специалистом по ракетам OSGi, поэтому моей первой идеей было проинспектировать MANIFEST.MF в com.thirdparty:artifact. Помимо прочего, это показывает следующее:

Import-Package: com.thirdparty.library

Таким образом, очевидно, что это просто указывает com.thirdparty:artifact импортировать этот пакет из некоторого пакета, и OSGi / Eclipse считает, что «хорошо, com.othervendor:library более адекватно, чем com.thirdparty:library».

Кажется, есть два метода сужения фактически используемых зависимостей. Однако: я не уверен (а) как интегрировать их в мой p2-maven-plugin рабочий процесс, и (б) я не понимаю, почему p2-maven-plugin не требует автоматически конкретную версию пакета в директиве Import-Package (эта информация, в конце концов, уже указана в источник pom.xml).

Наверное, я не вижу здесь леса за деревьями. Так что любые общие советы, кроме моих вопросов выше, очень приветствуются!


[edit] Вот моя pom.xml (конкретная библиотека, которую я собираюсь использовать для OSGi-ify - Selenium):

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>com.example.p2dependencies</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>pom</packaging>
  <build>
    <plugins>
      <plugin>
        <groupId>org.reficio</groupId>
        <artifactId>p2-maven-plugin</artifactId>
        <version>1.2.0</version>
        <executions>
          <execution>
            <id>default-cli</id>
            <configuration>
              <artifacts>
                <artifact><id>org.seleniumhq.selenium:selenium-java:3.4.0</id></artifact>
              </artifacts>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

[edit2] Проблема, похоже, решена, похоже, проблема связана с дополнительным пакетом, который был экспортирован только com.othervendor:library.


person qqilihq    schedule 04.07.2017    source источник
comment
Можешь показать pom файл ..?   -  person khmarbaise    schedule 04.07.2017
comment
@khmarbaise Конечно ... отредактировал вопрос.   -  person qqilihq    schedule 04.07.2017