当前位置: 首页 > 知识库问答 >
问题:

在XTend中加载EMF模型实例

盛承
2023-03-14

我正在XTend中构建一个代码生成器,在那里我已经有了输入模型和元模型。也就是说,我使用ATL为XTend代码生成器生成输入模型(作为转换序列的一部分,以逐步降低抽象级别,而不是立即;这就是我不使用xtext创建语法的原因)。

解决方案:

解决方案正如Sven在我接受的答案中所建议的,但我也想指出,您需要使用genmodel来从元模型生成Java工件。此链接显示了如何:http://www.vogella.com/articles/eclipseemf/article.html,参见第4节。这可能看起来太合乎逻辑了,但我认为它还是值得注意的。

共有1个答案

薛云瀚
2023-03-14

如果您有一个XMI,只是想从中生成代码,那么根本就不需要Xtext。从一个Java项目开始(我将使用一个插件项目,以重用依赖项管理)并开始编码:

import org.eclipse.emf.common.util.URI
import org.eclipse.emf.ecore.EPackage
import org.eclipse.emf.ecore.resource.Resource$Factory$Registry
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl

class MyCodeGenerator {

  def static void main(String[] args) {
    new MyCodeGenerator().generate("mymodel.xmi")
  }

  def generate(String file) {
    doEMFSetup
    val resourceSet = new ResourceSetImpl
    val resource = resourceSet.getResource(URI.createURI(file), true)
    for (content : resource.contents) {
      generateCode(content)
    }
  }

  def dispatch generateCode(MySpecialType it) '''
    public class «name» {
      «FOR member : members»
      «ENDFOR»
    }
  '''

  def dispatch generateCode(MyMember it) '''
    private «type» «name»;
    ...
  '''

  def doEMFSetup() {
//    EPackage$Registry.INSTANCE.put(MyPackage.eINSTANCE.nsURI, MyPackage.eINSTANCE)
    Resource$Factory.Registry.INSTANCE.extensionToFactoryMap.put("xmi", new XMIResourceFactoryImpl);
  }

}

需要添加到清单中的依赖项:

Require-Bundle: org.eclipse.xtend.lib,
 com.google.guava,
 org.eclipse.xtext.xbase.lib,
 org.eclipse.emf.common,
 org.eclipse.emf.ecore,
 org.eclipse.emf.ecore.xmi
 类似资料:
  • 我知道有几个关于这个主题的QnA。我已经尝试了很多解决方案,我总是得到相同的错误。 我的代码结构如下所示: 请帮忙 亲切的问候

  • 我有一个基于emf的模型。在模型中,我有一个feature类,我可以向这些feature添加约束。例如,特性A“暗示”特性B。我正在尝试使用emf命令堆栈向特性添加约束。它将约束添加到特征中,但缺少属性。我的代码如下

  • 我有两个基于同一ecore模型的EMF实例版本。我需要以以下格式准备一个从v1到v2更改的事物列表

  • 译者:talengu PyTorch的主要接口为Python。虽然Python有动态编程和易于迭代的优势,但在很多情况下,正是Python的这些属性会带来不利。我们经常遇到的生产环境,要满足低延迟和严格部署要求。对于生产场景而言,C 通常是首选语言,也能很方便的将其绑定到另一种语言,如Java,Rust或Go。本教程将介绍从将PyTorch训练的模型序列化表示,到C语言_加载_和_执行_的过程。

  • 我正在尝试使用eclipse gmf创建一个基于uml模型的图形编辑器, 为此,我基于我的uml模型创建了一个.gnemodel文件,但在生成的.ecore文件中没有关联

  • 问题内容: 我有一个问题问你: 我想在Jena TDB TripleStore上加载文件。我的文件很大,大约80Mb和大约700000的三倍RDF。当我尝试加载它时,执行将停止工作或需要很长时间。 我正在使用在Web服务上运行的以下代码: 有时我会收到Java堆空间错误: 如何将这个文件加载到模型Jena中并将其保存在TDB中?提前致谢。 问题答案: 您需要在statup上为JVM分配更多的内存。