【发布时间】:2012-06-22 00:03:49
【问题描述】:
我正在尝试使用 Acceleo 生成一些代码。我正在内存中构建我的模型实体,我想为它生成代码。
现在,当 Acceleo 尝试将我的模型对象与我的模板函数的参数类型匹配时,它不匹配。类完全相同,但由于 Acceleo 的包注册表和我的内存模型不同,它们不匹配,Acceleo 说找不到与主模板匹配的模型元素。
我可以纠正这个问题吗?我可以强制 acceleo 包注册表成为内存注册表吗?我可以在语义级别强制类匹配(而不仅仅是在 Java == 上?)
【问题讨论】:
-
注册包的nsURI是
http://mypackage.com/1.0/。 Acceleo使用的类的容器是EPackageImpl,而我传递的模型类的容器是MyOwnPackageImpl。这表明 Acceleo 没有使用与我的运行时实例相同的包注册表。 -
啊哈,当我使用XMI编译模式时,Acceleo只得到一个代理!
-
而且Acceleo使用的代理URI是
file:///path/to/file.emtl#//mypackage/Object而不是http://mypackage.com/1.0/#/mypackage/Object。我的模块在 MTL 文件中正确定义为[module generateRCode('http://mypackage.com/1.0/')]。 -
好的,我设法赋予了正确的 URI。但是,它仍然无法正确解析(仍然只能获得一个代理)
-
非常感谢您的帮助 Laurent。我会自己搜索一下,如果我再次陷入搜索困境,我会重新提出一个问题:-)