1

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

我得到的错误是

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

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

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

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

空对象

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

[编辑] 正如独立文档所指出的,

我在 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,并尝试在另一个项目中使用它,我会遇到和以前一样的问题

4

1 回答 1

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());
       } 

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

通过这些修改,如果作为 Java 应用程序执行,则代码生成工作。作为 Acceleo 应用程序运行转换不起作用

于 2014-08-01T03:53:31.960 回答