Xtext基于eCore模型生成DSL时序列化器无法找到待导入模型
Xtext复用独立eCore模型生成代码时SemanticSequencer导入报错修复
运行GenerateMyDsl.mwe2后MyDslSemanticSequencer类无法导入自定义eCore模型TransformationQueryLanguageModel的类,是独立eCore适配Xtext时的常见配置问题,按以下步骤逐一排查修复即可:
- 校验mwe2工作流的eCore关联配置
打开GenerateMyDsl.mwe2文件,定位到StandardLanguage配置段,确认两个核心路径配置正确指向你的eCore模型和对应的genmodel文件,不要使用Xtext项目初始化时默认生成的空白示例eCore路径,参考配置:
修改配置前先手动删除Xtext项目下language = StandardLanguage { name = "org.xtext.example.mydsl.MyDsl" // 替换为你自己的TransformationQueryLanguageModel文件实际路径 referencedResource = "platform:/resource/[你的eCore存放项目名]/model/TransformationQueryLanguageModel.ecore" genModel = "platform:/resource/[你的eCore存放项目名]/model/TransformationQueryLanguageModel.genmodel" }src-gen、xtend-gen目录里的所有旧生成代码,避免旧代码残留干扰。 - 补全项目依赖配置
打开DSL项目的META-INF/MANIFEST.MF文件,切到Dependencies标签页,在Required Plug-ins列表里添加你存放TransformationQueryLanguageModel的EMF项目,同时确认已经引入org.eclipse.emf.ecore依赖;如果是普通Java项目而非OSGi插件项目,就在Java Build Path里把EMF模型项目/生成的jar包添加为编译依赖。
配置完成后右键项目执行Refresh和Validate,触发Eclipse重建类路径索引。 - 确认eCore模型本身的代码生成正常
打开TransformationQueryLanguageModel.genmodel文件,右键模型根节点选择Generate Model Code,先确认eCore对应的Java接口、实现类全部生成成功、无编译错误,再重新运行mwe2工作流生成DSL代码。 - 校验包名匹配度
打开报错的MyDslSemanticSequencer文件,查看无法解析的导入语句的包路径,和eCore模型实际生成的Java类包路径做对比:如果路径不一致,说明mwe2加载了错误的同名eCore模型,修正referencedResource和genModel的路径后重新生成即可。
修复后如果仍有残留报错,直接删除项目下
bin、target编译缓存目录,执行一次Project -> Clean全量重编译即可解决缓存导致的假报错。
内容的提问来源于stack exchange,提问作者someStudentCS
相关产品推荐
相关产品推荐

