Если у вас есть код, сгенерированный вашей метамоделью:
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()
, который используется для регистрации файла .ecore
в рабочей области (с полным путем к рабочей области) в нашем реестре пользовательских пакетов. Если вы хотите зарегистрировать свою метамодель в глобальном реестре пакетов EMF, замените resourceSet.getPackageRegistry()
на EPackage.Registry.INSTANCE
.