Acceleo - Cross模型参考Java Application

时间:2014-07-18 18:12:25

标签: java acceleo

我从两个相关的元模型开始生成代码。主要的是引用第二个类。 Acceleo执行作为Acceleo插件执行时效果很好,但在作为Java应用程序执行时却不行。如果我启动Java主类,则第二个相关元模型的数据不可见。

我得到的错误是

org.eclipse.acceleo.engine.AcceleoEvaluationException: Unresolved compilation error in generation module

我向您展示了一个Debug模式的片段。 target 是对第二个元模型(名为peersbehavior)的类的引用。

---- URI是正确的,它指向的确切位置---- exact URI

----但是没有检索到值----

empty object

我在ATL Model2Model转换时遇到了类似的问题:必须选中“允许模型间引用”选项。但在Acceleo中我找不到类似的东西

[编辑] 正如standalone documentation指出的那样,

我在Java类中添加了这两行代码

public void registerResourceFactories(ResourceSet resourceSet) 
      {
        super.registerResourceFactories(resourceSet);
        // code added by me

        resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("systembehavior", new XMIResourceFactoryImpl());
        resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("peerbehavior", new XMIResourceFactoryImpl());
       }  

现在它也可以启动Java类,但是如果我将项目导出为Jar,并尝试在另一个项目中使用它,我会遇到与之前相同的问题

1 个答案:

答案 0 :(得分:0)

我解决了这个问题,添加了这个代码(如我的问题的[EDIT]部分所指出的)

public void registerResourceFactories(ResourceSet resourceSet) 
      {
        super.registerResourceFactories(resourceSet);
        // code added by me

        resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("systembehavior", new XMIResourceFactoryImpl());
        resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("peerbehavior", new XMIResourceFactoryImpl());
       } 

手动添加.emtl 编译文件,在src目录中(否则它们不会插入.jar中)。

通过这些修改,代码生成在作为Java应用程序执行时有效。在Acceleo应用程序中运行转换不起作用