Использовать один и тот же проект для модели EMF и редактировать код?
Можно ли каким-то образом использовать один и тот же проект подключаемого модуля Eclipse как для сгенерированной модели EMF, так и для соответствующего сгенерированного кода редактирования EMF?
Обычно эти два компонента находятся в двух разных проектах, EMF Edit один с суффиксом .edit
к его имени. Я нахожу это излишним, поскольку в проекте Edit так мало кода, и он так тесно связан с кодом модели.
Я попытался установить оба modelDirectory
и editDirectory
Gen Model приписывает (разные) каталоги в одном и том же проекте, но это, кажется, приводит к бесконечной путанице и проблемам сборки. Я думаю, что, возможно, два шага генерации перезаписывают файлы настроек проекта друг друга.
1 ответ
После дополнительных экспериментов кажется, что работает нормально, когда EMF и EMF Edit генерируют код в одном проекте.
Вот что я должен был сделать, чтобы это работало:
- Установка свойства genmodel
modelDirectory
а такжеeditDirectory
в тот же каталог. В противном случае я получил ошибку сборки, говорящую "Тип... уже определен в...". - Установка свойства genmodel
bundleManifest="false"
, В противном случае идентификатор плагина перезаписывается процессом генерации.
Помимо этого я также установил updateClasspath="false"
чтобы избежать того, что процесс генерации портится с этим.
Автоматическое обновление манифеста и plugin.xml
Файлы выглядят следующим образом:
- Установить идентификатор плагина
- Добавить экспортированные пакеты
- Добавить расширения 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>