1

我已经成功地创建了一个用于 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)

我一直在寻找有关此错误的信息,但我不知道其原因。关于解决我的问题的任何想法?

谢谢

4

3 回答 3

0

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

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

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

您可能也有兴趣观看描述该过程的视频(需要注册)。

于 2013-02-20T08:04:37.640 回答
0

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

也许这会有所帮助: Acceleo 独立 - 第一个参数是代理

于 2013-05-25T07:58:43.420 回答
0

当您的元模型包含子包并且顶级包不包含任何类时,会发生此问题。为了解决这个问题,在顶层包中添加一个 Dummy 类并重新生成元模型代码。它对我来说很好。

于 2020-11-04T18:01:23.600 回答