Использовать один и тот же проект для модели EMF и редактировать код?

Можно ли каким-то образом использовать один и тот же проект подключаемого модуля Eclipse как для сгенерированной модели EMF, так и для соответствующего сгенерированного кода редактирования EMF?

Обычно эти два компонента находятся в двух разных проектах, EMF Edit один с суффиксом .edit к его имени. Я нахожу это излишним, поскольку в проекте Edit так мало кода, и он так тесно связан с кодом модели.

Я попытался установить оба modelDirectory и editDirectory Gen Model приписывает (разные) каталоги в одном и том же проекте, но это, кажется, приводит к бесконечной путанице и проблемам сборки. Я думаю, что, возможно, два шага генерации перезаписывают файлы настроек проекта друг друга.

1 ответ

Решение

После дополнительных экспериментов кажется, что работает нормально, когда EMF и EMF Edit генерируют код в одном проекте.

Вот что я должен был сделать, чтобы это работало:

  1. Установка свойства genmodel modelDirectory а также editDirectory в тот же каталог. В противном случае я получил ошибку сборки, говорящую "Тип... уже определен в...".
  2. Установка свойства genmodel bundleManifest="false", В противном случае идентификатор плагина перезаписывается процессом генерации.

Помимо этого я также установил updateClasspath="false" чтобы избежать того, что процесс генерации портится с этим.


Автоматическое обновление манифеста и plugin.xml Файлы выглядят следующим образом:

  1. Установить идентификатор плагина
  2. Добавить экспортированные пакеты
  3. Добавить расширения EMF в plugin.xml

2 и 3 необходимо выполнить вручную, если они желательны. Это будет включать добавление записей в plugin.xml похож на эти:

<extension point="org.eclipse.emf.ecore.generated_package">
   <!-- @generated model -->
   <package
         uri="somePackage"
         class="somePackage.SomePackage"
         genModel="model/model.xcore"/>
</extension>

<extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
   <!-- @generated model -->
   <factory
         uri="somePackage"
         class="somePackage.someClass"
         supportedTypes=
           "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
            org.eclipse.emf.edit.provider.IStructuredItemContentProvider
            org.eclipse.emf.edit.provider.ITreeItemContentProvider
            org.eclipse.emf.edit.provider.IItemLabelProvider
            org.eclipse.emf.edit.provider.IItemPropertySource"/>
</extension>
Другие вопросы по тегам