RCP-приложение, запущенное из Eclipse, работает нормально, при экспорте выдается InjectionExceptions - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь выполнить свое приложение RCP, которое я недавно переместил из Индиго затмения в Фотон. После изменения / обновления необходимых библиотек мне удалось без проблем запустить приложение, запустив продукт как приложение Eclipse (из Eclipse IDE).

Однако, когда я экспортирую продукт в собственный исполняемый файл и запускаю его, я получаю несколько InjectionException

!SESSION 2018-09-06 16:48:55.406 -----------------------------------------------
eclipse.buildId=unknown
java.version=1.8.0_171
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=es_ES
Framework arguments:  -clearPersistedState
Command-line arguments:  -os win32 -ws win32 -arch x86 -clean -clearPersistedState

!ENTRY org.eclipse.e4.ui.workbench 4 0 2018-09-06 16:48:59.412
!MESSAGE Unable to create class 'org.eclipse.e4.ui.internal.workbench.addons.CommandProcessingAddon' from bundle '52'
!STACK 0
org.eclipse.e4.core.di.InjectionException: Unable to process "CommandProcessingAddon.broker": no actual value was found for the argument "IEventBroker".
    at org.eclipse.e4.core.internal.di.InjectorImpl.reportUnresolvedArgument(InjectorImpl.java:489)
    at org.eclipse.e4.core.internal.di.InjectorImpl.resolveRequestorArgs(InjectorImpl.java:480)
    at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:126)
    at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:412)
    at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:345)
    at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:214)
    at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:108)
    at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:74)
    at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:51)
    at org.eclipse.e4.ui.internal.workbench.swt.E4Application.createE4Workbench(E4Application.java:282)
    at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:617)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:597)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)
...

!ENTRY org.eclipse.e4.ui.workbench 4 0 2018-09-06 16:48:59.419
!MESSAGE Unable to create class 'org.eclipse.e4.ui.internal.workbench.addons.ContextProcessingAddon' from bundle '52'
!STACK 0
org.eclipse.e4.core.di.InjectionException: Unable to process "ContextProcessingAddon.broker": no actual value was found for the argument "IEventBroker".
    at org.eclipse.e4.core.internal.di.InjectorImpl.reportUnresolvedArgument(InjectorImpl.java:489)
    at org.eclipse.e4.core.internal.di.InjectorImpl.resolveRequestorArgs(InjectorImpl.java:480)
    at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:126)
    at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:412)
    at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:345)
    at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:214)
    at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:108)
    at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:74)
    at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:51)
    at org.eclipse.e4.ui.internal.workbench.swt.E4Application.createE4Workbench(E4Application.java:282)
    at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:617)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:597)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)

и т.д.

Я проверил, что список плагинов в конфигурации запуска и продукте совпадают (выбран с «добавить необходимые плагины» и отмечен «проверить плагины» в конфигурации запуска). Фактически, нажатие кнопки добавления необходимых плагинов со страницы продукта, по-видимому, оставляет некоторые плагины, которые включены в окно запуска (и, по-видимому, они необходимы для запуска приложения в затмении), поэтому я добавил недостающие плагины вручную. к продукту, но все равно не повезло. Я загрузил окончательный список плагинов (тот, что из конфигурации запуска) в этот каталог , чтобы посмотреть, связано ли это с ним. Список плагинов, автоматически сгенерированный из продукта, практически такой же, но содержит на 7 плагинов меньше (и я добавил тогда, как я сказал выше).

Я новичок в Eclipse Photon и всем этом механизме внедрения, но я почти уверен, что мой проект не использует его напрямую (может быть, какой-то новый плагин, который включен, использует его косвенно?).

Я использовал параметры -clean и -cleanPersistedState, как предложено в другом ответе, для решения проблем с инъекцией, но я все еще получаю те же результаты.

Есть какие-нибудь подсказки, как решить эту проблему или как отключить инъекцию / какой плагин вызывает инъекцию?

Привет

1 Ответ

0 голосов
/ 07 сентября 2018

Возможно, плагин декларативных сервисов OSGi org.eclipse.equinox.ds не запускается, что не позволило бы запустить фабрику посредника событий.

Если вы используете файл xxx.product для настройки RCP, проверьте раздел «Начальные уровни» на вкладке «Конфигурация». Используйте кнопку «Добавить рекомендуемое», чтобы добавить рекомендуемую начальную конфигурацию, которая включает org.eclipse.equinox.ds

Обновление: для Eclipse 2018-09 и далее org.apache.felix.scr заменяет org.eclipse.equinox.ds и требует аналогичной конфигурации начального уровня.

...