Ecore EMF加载XMI报PackageNotFoundException找不到Animals.ecore如何解决
EMF包未找到报错解决方案
以下方案按操作复杂度从低到高排序,优先尝试方案1:
方案1:Eclipse插件配置自动注册(适配Eclipse插件开发场景)
- 打开当前项目的
plugin.xml,切换至Dependencies标签页,点击Add按钮,搜索包含Animals.ecore的插件项目,添加为当前项目的依赖 - 若你仅持有单独的
Animals.ecore文件,无对应插件项目,可将Animals.ecore放入当前项目的model/目录下,再切换到plugin.xml的Extensions标签页,添加org.eclipse.emf.ecore.generated_package扩展点,填写两个字段:uri字段填报错提示中找不到的URI:platform:/plugin/Animals/model/Animals.ecoreclass字段如果有自动生成的包Java类就填全类名,没有直接填ecore文件相对路径model/Animals.ecore即可
- 重启Eclipse应用运行配置,勾选所有关联插件后即可生效
方案2:代码手动注册(通用所有运行场景)
在加载xmi文件的代码执行前,手动将Animals.ecore注册到EMF全局包注册表,示例代码如下:
import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.emf.ecore.xmi.impl.EcoreResourceFactoryImpl; // 注册Ecore文件解析工厂 Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("ecore", new EcoreResourceFactoryImpl()); // 加载本地Animals.ecore文件,替换为你实际的文件路径 Resource ecoreResource = new ResourceSetImpl().getResource(URI.createFileURI("C:/你的本地路径/Animals.ecore"), true); EPackage animalsPackage = (EPackage) ecoreResource.getContents().get(0); // 将包注册到全局注册表,key为报错中缺失的URI EPackage.Registry.INSTANCE.put("platform:/plugin/Animals/model/Animals.ecore", animalsPackage);
- 注册完成后再执行xmi加载逻辑即可正常识别模型包
方案3:VM参数URI映射(适配临时测试场景)
仅需要临时测试不想修改代码或配置的场景,可在Eclipse启动配置的Arguments标签页,VM参数栏添加以下配置:
-DEMF_URI_MAP=platform:/plugin/Animals/model/Animals.ecore=file:/C:/你的本地路径/Animals.ecore
EMF运行时会自动完成URI映射,直接读取你本地的ecore文件。
内容的提问来源于stack exchange,提问作者llTtoOmMll
相关产品推荐
相关产品推荐

