我可能好像在问一个之前已经问过的问题,但其他论坛帖子中指出的解决方案对我不起作用。
我正试图独立运行一个Acceleo项目。
public void registerPackages(ResourceSet resourceSet) {
super.registerPackages(resourceSet);
if(!isInWorkspace(PSMAndroid.PSMAndroidPackage.class)){
System.out.println("uri: "+PSMAndroid.PSMAndroidPackage.eNS_URI);
resourceSet.getPackageRegistry().put(PSMAndroid.PSMAndroidPackage.eNS_URI, PSMAndroid.PSMAndroidPackage.eINSTANCE);
}
}
还有:
public void registerResourceFactories(ResourceSet resourceSet) {
super.registerResourceFactories(resourceSet);
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("psmandroid",new XMIResourceFactoryImpl());
}
该模块如下所示:
[module componentModule('org.colpaert.mathias.PSMAndroid')]
我收到以下错误:
org.eclipse.acceleo.engine.AcceleoEvaluationException:名为'generateModel'的主模板的第一个参数的类型是代理。
我查看了其他帖子,但这些都不适用于我。 (here和here)
生成器作为“加速应用程序”启动时工作,没有上面的代码行。当我添加行,作为Java应用程序运行时,我得到上面的错误。但是当我再次尝试作为“加速应用程序”运行时,我得到以下错误:
所以这不再适用了。
我该怎么办?
额外信息:我在我的加速器生成项目的构建路径属性中添加了ecore模型(带有model& genmodel等的项目)作为项目引用。
答案 0 :(得分:2)
问题出在我的元模型URI中。元模型使用ecore定义, 你应该总是在元模型URI前加上“http://”!
我的元模型的名称是: org.colpaert.mathias.PSMAndroid,它在我的加速模块中导入如下:
[模块模型('org.colpaert.mathias.PSMAndroid')/]
这导致加速器在相对于模块文件的路径中查找元模型。在独立版本中,编译后,这只是/ bin文件夹。
我更改了我的ecore元模型URI,重新生成了genmodel(等)。接下来,我将加速模块更改为:
[模块模型('http://org.colpaert.mathias.PSMAndroid')/],
清理解决方案,重新编译并运行。
非常感谢StéphaneBégaudeau,他解决了这个here(法语版)