Acceleo独立 - 第一个参数是代理

时间:2013-04-11 20:04:17

标签: eclipse-emf acceleo

我可能好像在问一个之前已经问过的问题,但其他论坛帖子中指出的解决方案对我不起作用。

我正试图独立运行一个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'的主模板的第一个参数的类型是代理。

我查看了其他帖子,但这些都不适用于我。 (herehere

生成器作为“加速应用程序”启动时工作,没有上面的代码行。当我添加行,作为Java应用程序运行时,我得到上面的错误。但是当我再次尝试作为“加速应用程序”运行时,我得到以下错误:

error

所以这不再适用了。

我该怎么办?

额外信息:我在我的加速器生成项目的构建路径属性中添加了ecore模型(带有model& genmodel等的项目)作为项目引用。

1 个答案:

答案 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(法语版)