Создание пользовательских меню с помощью Eclipse e4 (с использованием файла Application.e4xmi) не отображается во время запуска продукта (в режиме отладки).

Я создал новый «Проект приложения Eclipse 4» с помощью Luna, и я создал настраиваемое меню, используя этот файл «Application.e4xmi». Также я добавил класс обработчика, который будет запускаться при нажатии моего пользовательского меню (все эти вещи были указаны в Application.e4xmi).

С этой настройкой Если я запускаю свой продукт (как продукт Eclipse) в режиме отладки, я не могу видеть свои пользовательские меню, а также Если я пытаюсь экспортировать как продукт и пытаюсь запустить продукт eclipse, в котором я работаю. проблемы.

Содержимое xmi включает:

<application:Application xmi:version="2.0"  xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:application="http://www.eclipse.org/ui/2010/UIModel/application" xmlns:basic="http://www.eclipse.org/ui/2010/UIModel/application/ui/basic" xmlns:menu="http://www.eclipse.org/ui/2010/UIModel/application/ui/menu" xmi:id="_hHQuoFh2EeWNzdEqyCDxmA" elementId="org.eclipse.e4.ide.application" bindingContexts="_hHQuqVh2EeWNzdEqyCDxmA">
  <children xsi:type="basic:TrimmedWindow" xmi:id="_hHQuoVh2EeWNzdEqyCDxmA" label="com.ami.test.e4project" width="500" height="400"/>
  <handlers xmi:id="_6WD5YFh2EeWNzdEqyCDxmA" elementId="com.ami.test.e4project.handler.0" contributionURI="bundleclass://com.ami.test.e4project/com.ami.test.e4project.HandlerImplementation" command="_3T-ocFh2EeWNzdEqyCDxmA"/>
  <rootContext xmi:id="_hHQuqVh2EeWNzdEqyCDxmA" elementId="org.eclipse.ui.contexts.dialogAndWindow" name="In Dialog and Windows">
    <children xmi:id="_hHQuqlh2EeWNzdEqyCDxmA" elementId="org.eclipse.ui.contexts.window" name="In Windows"/>
    <children xmi:id="_hHQuq1h2EeWNzdEqyCDxmA" elementId="org.eclipse.ui.contexts.dialog" name="In Dialogs"/>
  </rootContext>
  <menuContributions xmi:id="_s3SAEFh2EeWNzdEqyCDxmA" elementId="com.ami.test.e4project.menucontribution.0" parentId="org.eclipse.e4.legacy.ide.application">
    <children xsi:type="menu:Menu" xmi:id="_z21zMFh2EeWNzdEqyCDxmA" elementId="com.ami.test.e4project.menu.filee" label="Filee">
      <children xsi:type="menu:HandledMenuItem" xmi:id="_0PiAAFh2EeWNzdEqyCDxmA" elementId="com.ami.test.e4project.handledmenuitem.new" label="New" command="_3T-ocFh2EeWNzdEqyCDxmA"/>
    </children>
  </menuContributions>
  <commands xmi:id="_3T-ocFh2EeWNzdEqyCDxmA" elementId="com.ami.test.e4project.command.command" commandName="command"/>
  <addons xmi:id="_hHQuolh2EeWNzdEqyCDxmA" elementId="org.eclipse.e4.core.commands.service" contributionURI="bundleclass://org.eclipse.e4.core.commands/org.eclipse.e4.core.commands.CommandServiceAddon"/>
  <addons xmi:id="_hHQuo1h2EeWNzdEqyCDxmA" elementId="org.eclipse.e4.ui.contexts.service" contributionURI="bundleclass://org.eclipse.e4.ui.services/org.eclipse.e4.ui.services.ContextServiceAddon"/>
  <addons xmi:id="_hHQupFh2EeWNzdEqyCDxmA" elementId="org.eclipse.e4.ui.bindings.service" contributionURI="bundleclass://org.eclipse.e4.ui.bindings/org.eclipse.e4.ui.bindings.BindingServiceAddon"/>
  <addons xmi:id="_hHQupVh2EeWNzdEqyCDxmA" elementId="org.eclipse.e4.ui.workbench.commands.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.CommandProcessingAddon"/>
  <addons xmi:id="_hHQuplh2EeWNzdEqyCDxmA" el ementId="org.eclipse.e4.ui.workbench.handler.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.HandlerProcessingAddon"/>
  <addons xmi:id="_hHQup1h2EeWNzdEqyCDxmA" elementId="org.eclipse.e4.ui.workbench.contexts.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.ContextProcessingAddon"/>
  <addons xmi:id="_hHQuqFh2EeWNzdEqyCDxmA" elementId="org.eclipse.e4.ui.workbench.bindings.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench.swt/org.eclipse.e4.ui.workbench.swt.util.BindingProcessingAddon"/>
</application:Application>

person Ragu    schedule 11.09.2015    source источник


Ответы (1)


Вы используете вклады меню в несуществующее меню (org.eclipse.e4.legacy.ide.application).

Когда вы создаете приложение e4 с помощью Application.e4xmi, нет предопределенных меню или чего-либо еще. Вы должны определить нужные меню. Добавьте дочерний элемент «Главное меню» в «Обрезанное окно» и поместите туда пункты меню.

person greg-449    schedule 11.09.2015
comment
Да, ты прав. Я совершил ошибку, добавив свое пользовательское меню с неправильным идентификатором (org.eclipse.e4.legacy.ide.application). Опубликованный ответ работает для меня. Спасибо!! - person Ragu; 12.09.2015
comment
Грег-449: У меня есть один вопрос: если я добавлю дочерний элемент «Главное меню» в свое усеченное окно, то весь внешний вид приложения RCP изменится на усеченное окно. Не хочу таким образом, уже у меня есть приложение RCP (на основе 3.7 RCP) со всеми необходимыми видами и настроенными менюшками. Сейчас я перехожу на архитектуру e4. Здесь мне просто нужно заменить эти существующие меню (меню 3.7 RCP) моим собственным набором «Новых меню» (используя e4). Можно ли добиться этого с помощью файла Application.e4xmi? - person Ragu; 12.09.2015
comment
Нет, e4 полностью отличается от режима совместимости с 3.x. Большая часть кода 3.x не будет работать в чистом приложении e4. e4 предназначен для приложений, которые не используют плагины или ресурсы org.eclipse.ui.xxx, такие как IFile. Если вы хотите использовать их, придерживайтесь 3.x RCP. - person greg-449; 12.09.2015
comment
Грег-449: Я перенес свой код 3.x для сборки в среде e4 (путем устранения всех ошибок, возникших в процессе миграции). Раньше (в коде 3.7) мы создавали меню вручную. Я узнал, что e4 представляет «Среду моделирования приложений», с помощью которой мы можем вводить меню, панели инструментов с относительно меньшим вмешательством в код. Поэтому я намерен удалить коды, которые я использовал ранее для создания меню (в 3.7), и я хотел бы, чтобы эти меню были определены в файле Application.e4xmi. То есть вы хотите сказать, что эта идея не сработает? - просто интересно узнать - person Ragu; 12.09.2015
comment
Трудно преобразовать RCP 3.x в «чистое» приложение e4, потому что ни одна из точек расширения и плагинов «org.eclipse.ui.xxx» не может быть использована. Так что все виды, редакторы, ... должны быть переработаны. Eclipse 4 по-прежнему поддерживает RCP в стиле 3.x. Но мне не ясно, что вы действительно хотите сделать, и это слишком большая область для комментариев (и не подходит для вопросов о переполнении стека). - person greg-449; 12.09.2015
comment
Спасибо, Грег, за ценную информацию... Я понимаю, что миграция с Eclipse 3.x на e4 связана с некоторыми сложностями. Но все же хотелось бы перейти с 3.х на е4. Причина в том, что я хочу получить доступ к новым функциям (таким как Dependency Injection), которые eclipse представила в своей серии e4. Итак, есть ли какие-либо шаги (или учебник), которые помогут мне в достижении этой миграции (несмотря на эти трудности). Или возможно ли иметь доступ к функциям e4 в серии 3.x (что, я считаю, невозможно в режиме 3.x) - просто уточнение. - person Ragu; 14.09.2015
comment
Я не знаю никаких гидов, но я действительно не смотрел. Некоторые люди, кажется, пробуют различные виды смешанных приложений, но опять же я не смотрел на них. - person greg-449; 14.09.2015
comment
Еще раз спасибо :) Последний вопрос, вы указали, что преобразовать RCP 3.x в «чистое» приложение e4 сложно, потому что ни одна из точек расширения и плагинов org.eclipse.ui.xxx не может быть повторно использована. . Так что все взгляды, редакторы... должны быть переработаны. Могу ли я получить список таких устаревших (или API, которые активны в 3.x RCP, а не в e4). Так что это будет очень полезно для меня (или, по крайней мере, перед тем, как выполнить фактическое переключение, я буду знать список API, которые не поддерживаются в серии Eclipse e4). - person Ragu; 14.09.2015