我使用转换引擎在运行时创建Ecore元模型,我想知道如何使用EMF注册元模型以便它可以识别元模型?以编程方式注册Ecore元模型
9
A
回答
16
如果您已通过您的元模型生成的代码:
resourceSet.getPackageRegistry()
.put(org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage.eINSTANCE.getNsURI()
, org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage.eINSTANCE);
(这里的 “的genmodel” 元模型)
如果你只有.ecore
文件:
// register globally the Ecore Resource Factory to the ".ecore" extension
// weird that we need to do this, but well...
Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put(
"ecore", new EcoreResourceFactoryImpl());
ResourceSet rs = new ResourceSetImpl();
// enable extended metadata
final ExtendedMetaData extendedMetaData = new BasicExtendedMetaData(rs.getPackageRegistry());
rs.getLoadOptions().put(XMLResource.OPTION_EXTENDED_META_DATA,
extendedMetaData);
Resource r = rs.getResource(uriOfYourModel, true);
EObject eObject = r.getContents().get(0);
if (eObject instanceof EPackage) {
EPackage p = (EPackage)eObject;
rs.getPackageRegistry().put(p.getNsURI(), p);
}
您可以使用名为registerEcorePackages()
的方法找到更多关于此代码here的信息,u sed在我们的定制软件包注册表中注册工作空间中的.ecore
文件(使用其工作空间的完整路径)。如果您想在EMF全局包注册表中注册您的元模型,请用EPackage.Registry.INSTANCE
替换resourceSet.getPackageRegistry()
。
1
我不得不@sbegaudeau修改代码一点,它的工作:
更换
rs.getPackageRegistry().put(p.getNsURI(), p);
与
EPackage.Registry.INSTANCE.put(p.getNsURI(), p);
而且,不知为什么我不能注册.ecore类型。必须使用“*”:Resource.Factory.Registry.INSTANCE. getExtensionToFactoryMap().put("*", new EcoreResourceFactoryImpl());
相关问题
- 1. XText以编程方式将DSL脚本解析为Ecore模型
- 2. 注册在独立Ecore模型的Java应用程序
- 3. 以编程方式注册taglib参考
- 4. 以编程方式注册星号
- 5. Drupal 7:实体注册模块:默认或以编程方式启用注册
- 6. 春编程方式注册RequestMapping
- 7. 如何以编程方式注册自定义URL方案?
- 8. 以编程方式注册Sharepoint 2007事件处理程序
- 9. 以编程方式在Azure上注册应用程序AD
- 10. 程序内购买以编程方式注册新产品
- 11. 以编程方式在注册表中注册性能计数器
- 12. 以编程方式创建django模型
- 13. 以程序方式注册条纹webhook
- 14. 导航ecore模型
- 15. 用ecore元模型生成xtend2代码
- 16. 以编程方式禁止注册表虚拟化
- 17. 如何以编程方式在WebApplicationInitializer中注册多个servlet?
- 18. 以编程方式注册C#/ VB.NET COM dll
- 19. 以编程方式创建注册表项
- 20. Excel Interop不会以编程方式注册我的工作簿
- 21. 如何以编程方式在Spring中注册FactoryBean的实例
- 22. 无法在Swift 3中以编程方式注册字体
- 23. 以编程方式访问注册表时出现问题
- 24. 以编程方式从SDK注册实例到AWS OpsWorks Stack
- 25. 在运行时以编程方式注册HttpModules
- 26. 在Jetty 7中以编程方式注册Servlet
- 27. 无法以编程方式读取某些注册表项
- 28. 以编程方式移动注册表键
- 29. 如何以编程方式注册域名?
- 30. 如何以编程方式注册XLL加载项?
非常感谢您的回答Stephane :) – capint 2012-02-22 12:21:04
SUPERB ANSWER !!!!!!非常感谢Stephane!不能感谢你足够的.....“ecore文件”技术是我正在寻找的! – 2012-06-14 19:38:32
嗨,真棒谢谢你!我不得不稍微修改一下代码以使其工作。详情请看我的答案。 – Andrei 2015-04-30 13:34:25