Как определить подключаемый модуль OSGI/Eclipse с бинарными компонентами для нескольких платформ

Я создал плагин Eclipse, и для поддержки его функциональности необходим собственный двоичный файл. У меня есть собственный код, готовый для Win и Mac. Вызов нативного кода отличается для каждой платформы, поэтому есть также некоторый код плагина, связанный с нативным кодом. (На самом деле нативный код — это код JNA, поэтому он действительно сильно отличается.) В настоящее время у меня есть точка расширения, и каждый встроенный плагин поддержки вносит свой вклад. Итак, как только здесь есть нативная поддержка, основной плагин работает. Также у меня есть тестовый фрагмент для каждого из встроенных плагинов поддержки функциональности модульного тестирования.

  1. Как мне настроить плагин(ы), чтобы каждый получал нужный плагин при загрузке с сайта обновлений или репозитория p2? (Я заметил, что, например, SWT использует фрагменты для нативного кода, так что это правильный путь?)

Изменить: после преобразования плагинов во фрагменты, как указано в ответе, что мне делать с фрагментами модульного тестирования этих плагинов? Фрагменты фрагментов невозможны.

  1. Как я могу настроить это в Tycho, чтобы сборка Tycho запускала тест, подходящий для текущей платформы, и игнорировала другую платформу.

Изменить: у меня есть собственный код для Mac и Windows, два фрагмента и, следовательно, две среды в файле pom. Но затем Tycho жалуется, что «плагин x не может быть установлен в этой среде, потому что его фильтр не применим», конечно, нет, в любой момент времени может быть активен только один из Win/Mac. Может ли Tycho понять это самостоятельно или мне нужны профили Maven, зависящие от ОС?


person Peter Kofler    schedule 22.12.2012    source источник
comment
Да, это путь. То, что находится во фрагменте, будет добавлено в путь к классам подключаемых модулей во время выполнения, что позволит вам обращаться к правильному коду подключаемого модуля, а также загружать правильную собственную библиотеку.   -  person nitind    schedule 23.12.2012
comment
Я знаю, но тогда у меня будет несколько фрагментов, один для Windows, один для Mac. Как настроить это на функции и как определить pom для этого в Tycho, вот в чем вопрос.   -  person Peter Kofler    schedule 24.12.2012
comment
Являются ли тесты платформы одинаковыми или разными для каждой платформы? Вам нужен доступ к ресурсам, доступным только во фрагменте? В обоих случаях вам, вероятно, понадобится фрагмент из основного пакета, но вам может потребоваться настроить параметры пути к классам, подобные dev.eclipse.org/mhonarc/lists/tycho-dev/msg00122.html   -  person Simon    schedule 31.12.2012


Ответы (1)


Да, вам нужно будет упаковать нативные пакеты во фрагменты подключаемых модулей. Для каждого фрагмента должен быть указан фильтр платформы, чтобы гарантировать, что для каждой платформы допустим только один фрагмент. Например, в 64-битной Windows вам нужно указать os=win32, ws=win32 arch=x86_64.

Если ваши фрагменты являются частью функции, вы также должны указать фильтр платформы в определении функции.

В Tycho вам необходимо указать все поддерживаемые комбинации фильтров платформы в разделе среды целевого конфигурация платформы в вашем файле pom.

Tycho всегда проводит тесты на текущей платформе. Добавьте свои фрагменты в среду выполнения теста — см. здесь о добавлении зависимостей в тихое время выполнения теста. Tycho часто требуется помощь в определении фрагментов для добавления в среду выполнения теста.

person Simon    schedule 26.12.2012
comment
Спасибо. Я изменил свои плагины на фрагменты и предоставил фильтры платформы во фрагментах, функциях и среде Tycho. К сожалению, я еще не закончил. См. дополнительные вопросы в основном вопросе. - person Peter Kofler; 30.12.2012