Я начинаю использовать p2-maven-plugin strong >, чтобы (надеюсь) удобно интегрировать в наш проект 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
- и я, очевидно, в беде. Вот визуализация моей ситуации:
Я не был специалистом по ракетам 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
.