我已成功创建了一个用于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)
我一直在寻找这个错误,但我不知道它的原因。 关于我的问题的解决方案的任何想法?
由于
答案 0 :(得分:0)
此问题的最常见原因是无法正确注册与您的inpu模型(System1.xmi)对应的元模型和工厂。
如果您查看生成的类" Generate.java"中的注释,您会注意到我们指示在独立运行时要遵循的步骤。最重要的开始registerPackages,您需要注册元模型。
如果您将启动调试到模型加载点(在行model = ModelUtils.load(newModelURI, modelResourceSet);
后面放置一个断点),您可以查看model.eResource().getErrors()
列表以查看是否存在加载错误你的模特。
您可能也有兴趣查看此video describing the process(需要注册)。
答案 1 :(得分:0)
查看加速模块的第一行, 元模型的URI是什么?它是以'http://'开头吗?
答案 2 :(得分:0)
当您的元模型包含子程序包,而顶级程序包不包含任何类时,就会发生此问题。 要解决该问题,请在顶层程序包中添加一个Dummy类,然后重新生成元模型代码。对我来说很好。