1

看起来我在问一个以前已经问过的问题,但是其他论坛帖子中指出的解决方案对我不起作用。

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

我查看了其他帖子,但没有一个对我有用。(这里这里

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

错误

所以这不再起作用了。

我应该怎么办?

额外信息:我在我的 acceleo 生成项目的构建路径属性中添加了 ecore 模型(带有模型和 genmodel 等的项目)作为项目参考。

4

1 回答 1

2

问题出在我的元模型 URI 中。元模型是使用 ecore 定义的,您应该始终将“http://”放在元模型 URI 前面!

我的元模型的名称是:org.colpaert.mathias.PSMAndroid,它是在我的 acceleo 模块中导入的,如下所示:

[模块模型('org.colpaert.mathias.PSMAndroid')/]

这导致 acceleo 在相对于模块文件的路径中查找元模型。在独立版本中,编译后,这只是 /bin 文件夹。

我更改了我的 ecore 元模型 URI,重新生成了 genmodel(等)。接下来我将 acceleo 模块更改为:

[模块模型(' http://org.colpaert.mathias.PSMAndroid ')/],

清理解决方案,重新编译并且它工作。

非常感谢 Stéphane Bégaudeau,他在这里解决了这个问题(法语版)

于 2013-04-25T15:23:12.237 回答