对 EMF 模型和编辑代码使用相同的项目?

Use the same project for EMF model and edit code?

我能否以某种方式对生成的 EMF 模型 和相应生成的 使用 相同的 Eclipse 插件项目 ]EMF 编辑 代码?

通常这两个组件位于两个不同的项目中,EMF Edit 项目的名称带有后缀 .edit。我觉得这是多余的,因为编辑项目中的代码很少,而且它与模型代码密切相关。

我曾尝试将 modelDirectoryeditDirectory Gen 模型属性设置为同一项目中的(不同)目录,但这似乎会导致无穷无尽的混乱和构建问题。我想也许这两个生成步骤会互相覆盖对方的项目设置文件。

经过更多实验后,在同一个项目中使用 EMF 和 EMF Edit 生成的代码似乎效果很好。

我必须做的事情如下:

  1. 将 genmodel 属性 modelDirectoryeditDirectory 设置到 相同的 目录。否则我得到一个构建错误说 "The type ... is already defined in ...".
  2. 正在设置 genmodel 属性 bundleManifest="false"。否则插件 ID 会被生成过程覆盖。

除此之外,我还设置了 updateClasspath="false" 以避免生成过程混乱。


清单和 plugin.xml 文件的自动更新如下:

  1. 设置插件ID
  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>