OSGi/BND: разные требования в зависимости от ОС

Я создал командный компонент для OSGi и использовал Apache Felix Shell. Одна команда открывает новый поток, который запускает пользовательский интерфейс SWT.

В конфигурации BND для сборки и запуска этого компонента требуется пакет SWT. Проблема сейчас в том, что каждый разработчик должен изменить конфигурацию и включить пакет SWT для своей ОС. Также для каждой ОС нужен другой упакованный Bundle, где единственное отличие — это строка в манифесте jar, для запуска которой требуются другие Bundle.

Есть ли какой-нибудь трюк в BND или OSGi, где я могу установить зависимость сборки или запуска в зависимости от текущей работающей системы?

Что-то вроде «org.eclipse.swt.{OS}.{WS}.{ARCH}» вместо «org.eclipse.swt.win32.win32.x86_64»? Или хотя бы можно в конфиге указать конкретную ОС? Так что, если пользователь использует неправильный пакет, он показывает хорошую ошибку вместо исключения ClassNotFound?

Решение, описанное в другом вопросе (http://stackoverflow.com/questions/2706222/create-cross-platform-java-swt-application/5784073#5784073), у меня не работает или лучше я не знаю, как это можно сделать с помощью BND/OSGi.

Любая идея?


person attrib    schedule 05.07.2012    source источник


Ответы (2)


bnd может использовать include. Поэтому создайте стандартную конфигурацию и включите ее в файлы bndrun для конкретной платформы.

 bnd.bnd:
 # standard set that uses macros for the places where specials need to be insered
 -runbundles: \
        ....
        ${platformdeps}

 windows.bndrun:
 -include bnd.bnd
 platformdeps = org.eclipse.swt.win.x86.jar

В любом случае, посмотрите на bndtools. Нил Бартлетт создает bndtools в bndtools без PDE. Так у него есть файлы bndrun для всех платформ.

Существует также макрос ${if ...} или макрос ${replace}. Если бы люди по-прежнему платили за книги, а не загружали пиратские версии… Пока эта небольшая проблема не решена, загляните на http://www.aqute.biz/Bnd/Bnd

person Peter Kriens    schedule 14.12.2012

В книге Нила Бартлетта «OSGi на практике» есть раздел о пакетах фрагментов, в котором упоминаются конфигурации, зависящие от операционной системы. (Однако, поскольку у меня не было необходимости делать это, я не могу сказать, действительно ли это то, что вы ищете.)

Книга: http://njbartlett.name/osgibook.html

(Это не очень красивый ответ, но, возможно, достаточно, чтобы начать.)

person Rainer Schwarze    schedule 05.07.2012
comment
Спасибо за совет. Но мне особо не помогло. Единственное, что я нашел, это то, что в этом случае фрагмент P будет объединен во время выполнения с внутренним путем к классам A. Но не знаю, как я этого добьюсь. - person attrib; 11.07.2012