Tycho и Eclipse: Как разрешить зависимости OSGI в мои собственные пакеты во время разработки в Eclipse, не открывая их все в IDE

Фон

Мое приложение Eclipse RCP построено с использованием Tycho. Он состоит из нескольких компонентов (в виде пакетов OSGi / плагинов Eclipse). Один из этих компонентов содержит файл продукта и материализует продукт.

В корне приложения есть POM реактора, который собирает все компоненты по порядку, но я также хочу создавать другие компоненты независимо (используяmvn deploy)

Создание такого отдельного компонента работает следующим образом:

Получить последние версии всех компонентов »s зависимости от нашей компании (p2) репозитория.Сборка компонента.Разверните компонент в хранилище нашей компании, чтобы использовать его в качестве зависимости для других компонентов.

Примечание: наш репозиторий является нормальнымMaven2 репозиторий, размещенный на Nexus, чьи артефакты RCP также автоматически отображаются в формат репозитория p2. Таким образом, Tycho может использовать формат хранилища p2 для поиска зависимостей, тогда как можно использовать стандартное развертывание Maven. Это отлично работает.

Примечание. Мой родительский POM гарантирует, что мы ищем зависимости по URL-адресу хранилища p2. URL-адрес развертывания - это расположение по умолчанию в хранилище в формате maven2. Это отлично работает.

проблема

При создании такого единственного компонента через командную строку (mvn deploy), Maven ищетвнутри проекта зависимости в репозитории p2 и они правильно разрешены (т.е. последняя версия автоматически загружается и используется в сборке).

Однако при разработке в Eclipse среда IDE не может разрешить их. Файлы манифеста выдают ошибку при каждой из моих внутрипроектных зависимостей, что они не могут быть разрешены.

Вопрос

Мой вопрос: как я могу заставить Eclipse IDE искать зависимости (и новые версии зависимостей) либо в:

Мой локальный репозиторий p2 ()~/.m2/repository/p2/osgi/bundlesМоя компания p2 хранилище ()nexus.mycompany.com/myproduct-snapshots/.meta/p2

В идеале, он будет искать их каждый раз и получать последнюю версию, если доступна более новая версия.

Если он не использует URL-адреса хранилища p2 в POM, как мне настроить Eclipse?

пример

Рассмотрим плагин Eclipsecom.mycompany.myproduct.fancy, который зависит от другого плагина затмения.com.mycompany.myproduct.core

Оба также имеют POM (настроенный для использования Tycho), который (через их родительское POM) правильно настроил мои репозитории Nexus: URL-адрес хранилища maven2 для развертывания и URL-адрес хранилища p2 для поиска зависимостей.

Сначала я развернуcore подключаемый модуль к моему репозиторию Maven (по умолчаниюmvn deploy). Хранилище Nexus предоставит этот развернутый плагин в формате maven и p2.

Когда я строюfancy компонент через командную строку (используяmvn install) (ранее развернутый) основной компонент будет найден и загружен автоматически.

project/com.mycompany.myproduct.fancy$ mvn clean install



Когда я открываю новое рабочее пространство Eclipse и открываюfancy компонент, его манифест (который содержит его зависимости) выдает следующую ошибку:

Bundle 'com.mycompany.myproduct.core' cannot be resolved.

Мой вопрос: как я могу развитьfancy компонент в Eclipse IDE без необходимости открыватьcore как проект в Eclipse.

спекуляция

Это спекуляция с моей стороны. Пожалуйста, поправьте меня, если яЯ не прав и любое другое решение актуальной проблемы также приветствуется!

Я знаюm2e Плагин Eclipse IDE в настоящее время сопоставляет POM Maven с концепциями Eclipse (с использованием коннекторов m2e). Я установил специальные разъемы Tycho. Например, этап компиляции mvn фактически выполняется компилятором Eclipse JDT.

Я также знаю, что когда в Eclipse запускается полный продукт Tycho, он запускается в среде Eclipse PDE. Например, мне нужно указать целевую платформу в моей конфигурации Run.

Я знаю, что могу открыть все компоненты в своем рабочем пространстве Eclipse. Это решило бы проблему, но неосуществимо, так как у меня много компонентов, и это нарушило бы разработку независимых компонентов.

Я предполагаю, что Eclipse m2e mapping и / или среда сборки PDE недостаточно умны, чтобы автоматически получать (последние) зависимости во время сборки. Пожалуйста, поправьте меня, если яЯ не прав. :)

Поэтому я предполагаю, что мне нужно указать и целевую платформу во время сборки. Я взглянул наОкно> Настройки> Разработка плагинов> Целевая платформа, Я могу добавить наш репозиторий p2 в Target Platform, что решает проблему. Однако это создает много проблем:

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

Если все вышеприведенное верно, я полагаю, мне нужен соединитель m2e (или другой, отличающийся от текущего), который фактически проверяет репозитории p2, указанные в POM, при разрешении зависимостей OSGi и автоматически добавляет их на целевую платформу.

Ответы на вопрос(2)

Ваш ответ на вопрос