gpt4 book ai didi

java - Acceleo - 与 Java 应用程序的跨模型引用

转载 作者:太空宇宙 更新时间:2023-11-04 14:42:07 27 4
gpt4 key购买 nike

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

我得到的错误是

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

我向您展示了 Debug模式的片段。 目标是对第二个元模型(名为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,并尝试在另一个项目中使用它,我会遇到与以前相同的问题

最佳答案

我通过添加此代码解决了这个问题(如我的问题的[编辑]部分所指出的)

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 应用程序运行转换不起作用

关于java - Acceleo - 与 Java 应用程序的跨模型引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24831316/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com