尝试在独立模式下执行Acceleo模块时遇到问题

时间:2013-02-19 17:44:46

标签: java eclipse acceleo

我已成功创建了一个用于M2T目的的Acceleo模块,并尝试从Java程序执行它。 这就是我试过的:

String[] str = {"/home/hamza/workspace/HLRedundancy/model/System1.xmi", "/home/hamza/workspace/HLRedundancy/"};
Generate.main(str);

Generate是我创建的Acceleo模块的名称,因此是包含Acceleo生成方法的Java类的名称。

这是我一直得到的错误:

Exception in thread "main" org.eclipse.acceleo.engine.AcceleoEvaluationException: The type of the first parameter of the main template named 'generateElement' is a proxy.
at org.eclipse.acceleo.engine.service.AcceleoService.doGenerate(AcceleoService.java:566)
at org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator.generate(AbstractAcceleoGenerator.java:193)
at org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator.doGenerate(AbstractAcceleoGenerator.java:158)
at HighLevelGenerator.main.Generate.doGenerate(Generate.java:250)
at HighLevelGenerator.main.Generate.main(Generate.java:160)
at Execute.main(Execute.java:11)

我一直在寻找这个错误,但我不知道它的原因。 关于我的问题的解决方案的任何想法?

由于

3 个答案:

答案 0 :(得分:0)

此问题的最常见原因是无法正确注册与您的inpu模型(System1.xmi)对应的元模型和工厂。

如果您查看生成的类" Generate.java"中的注释,您会注意到我们指示在独立运行时要遵循的步骤。最重要的开始registerPackages,您需要注册元模型。

如果您将启动调试到模型加载点(在行model = ModelUtils.load(newModelURI, modelResourceSet);后面放置一个断点),您可以查看model.eResource().getErrors()列表以查看是否存在加载错误你的模特。

您可能也有兴趣查看此video describing the process(需要注册)。

答案 1 :(得分:0)

查看加速模块的第一行, 元模型的URI是什么?它是以'http://'开头吗?

也许这有助于: Acceleo stand alone - first parameter is proxy

答案 2 :(得分:0)

当您的元模型包含子程序包,而顶级程序包不包含任何类时,就会发生此问题。 要解决该问题,请在顶层程序包中添加一个Dummy类,然后重新生成元模型代码。对我来说很好。