Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Acceleo-Java应用程序的交叉模型参考_Java_Acceleo - Fatal编程技术网

Acceleo-Java应用程序的交叉模型参考

Acceleo-Java应用程序的交叉模型参考,java,acceleo,Java,Acceleo,我从两个相关的元模型开始生成代码。主类引用了第二类的类。当作为Acceleo插件执行时,Acceleo执行效果很好,但当作为Java应用程序执行时,Acceleo执行效果不佳。如果启动Java主类,则第二个相关元模型的数据不可见 我得到的错误是 org.eclipse.acceleo.engine.AcceleoEvaluationException: Unresolved compilation error in generation module 我向您展示了调试模式的一个片段。目标是对第

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

我得到的错误是

org.eclipse.acceleo.engine.AcceleoEvaluationException: Unresolved compilation error in generation module
我向您展示了调试模式的一个片段。目标是对第二个元模型类(名为peersbehavior)的引用

----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,并尝试在另一个项目中使用它,我会遇到与以前相同的问题,添加此代码后我解决了此问题(如问题的[EDIT]部分所述)

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

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

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