You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行Acceleo转换遇PackageNotFoundException错误,求解决方案

解决Acceleo转换时的PackageNotFoundException错误

你在执行Acceleo转换时碰到的这个错误,本质是EMF在加载你的dummy.xmi模型时,找不到http://www.eclipse.org/mmt/qvtd/UmlToRdbms#rdbmsMM这个URI对应的Ecore元模型包。先把你遇到的错误日志贴出来方便参考:

Exception in thread "main" org.eclipse.emf.ecore.resource.impl.ResourceSetImpl$1DiagnosticWrappedException: org.eclipse.emf.ecore.xmi.PackageNotFoundException: Package with uri 'http://www.eclipse.org/mmt/qvtd/UmlToRdbms#rdbmsMM' not found. (file:/D:/Utenti/davi9/mde-workspace/Assignment2/Models/dummy.xmi, 7, 108) 
at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.handleDemandLoadException(ResourceSetImpl.java:319) 
at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoadHelper(ResourceSetImpl.java:278) 
at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.getResource(ResourceSetImpl.java:406) 
at org.eclipse.acceleo.common.utils.ModelUtils.load(ModelUtils.java:391) 
at org.eclipse.acceleo.common.utils.ModelUtils.load(ModelUtils.java:356) 
at org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator.initialize(AbstractAcceleoGenerator.java:488) 
at org.eclipse.acceleo.module.sample.common.Generate.<init>(Generate.java:90) 
at org.eclipse.acceleo.module.sample.common.Generate.main(Generate.java:144) 
Caused by: org.eclipse.emf.ecore.xmi.PackageNotFoundException: Package with uri 'http://www.eclipse.org/mmt/qvtd/UmlToRdbms#rdbmsMM' not found. (file:/D:/Utenti/davi9/mde-workspace/Assignment2/Models/dummy.xmi, 7, 108)

咱们一步步来解决这个问题:

1. 确认元模型已存在于项目依赖中

首先得确保你的工作区或者项目里有UmlToRdbms对应的RDBMS元模型:

  • 如果是Eclipse工作区,检查是否导入了包含RDBMS元模型的项目(比如带有.ecore文件的元模型项目,或者已经生成Java代码的元模型实现项目)。如果没有,你需要把这个元模型项目导入进来,或者从对应的插件库中获取。
  • 要是用Maven/Gradle构建项目,记得把包含该元模型的依赖jar包添加到你的构建脚本里,比如org.eclipse.mmt.qvtd.uml2rdbms相关的依赖。

2. 在Acceleo生成器中手动注册元模型包

EMF需要明确知道元模型包的位置,所以咱们得在Acceleo的生成类里手动注册这个包:

  • 打开你的Generate.java类,找到初始化ResourceSet的代码段(一般在构造函数或者initialize方法里)。
  • 添加类似下面的代码,把RDBMS元模型包注册到ResourceSet中:
// 获取当前生成器使用的ResourceSet
ResourceSet resourceSet = getResourceSet();
// 初始化并注册RDBMS元模型包
RDBMSPackage.eINSTANCE.eClass(); // 触发元模型包的初始化
resourceSet.getPackageRegistry().put(RDBMSPackage.eNS_URI, RDBMSPackage.eINSTANCE);

注意:这里的RDBMSPackage是元模型生成的Java类,要是你的元模型类名不同,记得替换成对应的类,而且要保证eNS_URI的值和错误里的URI完全一致。

3. 检查模型文件的URI引用是否正确

打开你的dummy.xmi文件,定位到第7行附近,检查里面的URI引用是不是和元模型定义的完全一致。有时候模型文件里的URI可能拼写错误,或者和元模型的NS_URI不匹配,这也会导致找不到包的问题。

4. 配置Eclipse运行依赖(如果是在IDE中运行)

要是你是在Eclipse里直接运行Acceleo生成器,记得在运行配置的「Dependencies」标签页里,添加包含RDBMS元模型的项目或者jar包。这样Acceleo在运行时才能加载到对应的元模型。

内容的提问来源于stack exchange,提问作者Davide

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:03:44