Как запустить приложение Equinox с аргументами запуска в Pax Exam?

Я хочу протестировать свое OSGI-приложение в Pax Exam, но у меня возникли проблемы с запуском приложения из одного из моих подключаемых модулей.

Я использую Equinox, и есть класс, специфичный для равноденствия, который расширяет org.eclipse.equinox.app.IApplication. Затем этот класс можно выбрать в средстве запуска приложений Eclipse, и он является первым классом для запуска (в моем случае он управляет жизненным циклом приложения).

Когда я запускаю тест Pax Exam, все пакеты разрешаются, но мое IApplication не запускается.

Как я могу запустить такое приложение в Pax Exam?

Кроме того, как я могу передать некоторые аргументы приложения? Я вижу только некоторые frameworkProperty (-F) и systemProperty (-D), но мне нужны обычные аргументы приложения.


person wajs    schedule 24.09.2014    source источник


Ответы (2)


Насколько я могу судить, IApplication не является частью равноденствия, а является частью платформы eclipse. Так что я думаю, что это напрямую не поддерживается на экзамене pax. Экзамен Pax запустит только платформу OSGi, а также загрузит и запустит указанные вами пакеты.

Таким образом, способ заставить это работать может заключаться в загрузке пакетов eclipse, которые заботятся о запуске приложений. Я не уверен, хотя, как это будет работать в деталях.

При использовании специфических материалов eclipse вы делаете свое приложение менее переносимым. Так что, может быть, вы можете добиться того же с чистой инфраструктурой OSGi?

Или приложение, которое вы хотите протестировать, является приложением eclipse RCP? В этом случае экзамен pax, вероятно, не лучший тестовый объект. В этом случае лучше подойдут некоторые фреймворки для тестирования пользовательского интерфейса. (например, https://developers.google.com/java-dev-tools/wintester/html/)

person Christian Schneider    schedule 24.09.2014
comment
Это обычное не RCP-приложение. - person wajs; 24.09.2014
comment
Итак, чего вы пытаетесь достичь, используя IApplication? Возможно, я могу предложить замену. - person Christian Schneider; 24.09.2014
comment
Это своего рода требование, я считаю, что причина заключалась в том, чтобы сгенерировать все хорошее Eclipse Launcher и его окружение. - person wajs; 24.09.2014

IApplication является частью Equinox и использует реестр, чтобы узнать, что установлено. Таким образом, помимо включения соответствующих jar-файлов в PAX, вам также необходимо убедиться, что вы запускаете как минимум декларативные службы и пакеты расширений реестра, иначе материал IApplication не будет найден.

Во-вторых, нет пакета, который вызывает класс EclipseStarter, который обрабатывает основные аргументы и передает их в среду выполнения. Поэтому, если вы не сделаете это сами, вы обнаружите, что приложение вообще не будет работать.

Если вы запускаете Eclipse специально, вы можете найти некоторые специфичные для Eclipse аргументы, чтобы указать их как системные свойства Java:

http://help.eclipse.org/luna/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fmisc%2Fruntime-options.html

например, вы можете указать -Dapplication.id=yourapp

Вы также можете попробовать eclipse.commands как список аргументов, разделенных новой строкой.

person AlBlue    schedule 24.09.2014
comment
Итак, как я могу использовать этот EclipseStarter для самостоятельного запуска своего приложения? - person wajs; 24.09.2014
comment
Из кода вы можете вызвать его как основной метод. См. stackoverflow.com/questions/4673406/ и/или моя книга о затмении ;-) - person AlBlue; 24.09.2014
comment
Но разве это не открытие еще одного контейнера osgi, помимо pax-exam? Потому что я вижу, что он возвращает новый bundleContext. - person wajs; 24.09.2014
comment
Да, это откроет новую структуру OSGi. Контекст пакета — это ваш дескриптор системы, так что вы можете, например. запускать и останавливать пакеты в содержащем фреймворке. - person AlBlue; 24.09.2014