有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Xtext语法中集成OCL类型的java问题

我正在做一个语法(Xtext项目),在那里我想重用OCL类型。通常,在Xtext中,使用import语句引用现有类型,例如

import "http://www.eclipse.org/emf/2002/Ecore" as ecore

已经有一个示例Xtext项目(CompleteOCL)将OCL类型集成到语法中。不幸的是,该项目在其导入声明中提到了本地插件,例如

import "platform:/resource/org.eclipse.ocl.examples.xtext.base/model/BaseCST.ecore" as base

所以清单中没有定义依赖项。MF文件。如果我想在语法中重复使用OCL类型,我就必须写一些例子

import "http://www.eclipse.org/ocl/3.0.0/BaseCST" as base

我添加了组织。日食ocl。例子。xtext。可以在我的语法中编写引用(OCL)BaseCST类型的规则。如果我试图生成Xtext工件,会出现以下错误:

     ... 3 more
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.eclipse.emf.mwe2.language.factory.SettingProviderImpl$1$1.setValue(SettingProviderImpl.java:54)
    ... 36 more
Caused by: java.lang.IllegalStateException: Problem parsing 'classpath:/org/xtext/example/mydsl/MyDsl.xtext':[XtextLinkingDiagnostic: null:5 Couldn't resolve reference to EPackage 'http://www.eclipse.org/ocl/3.0.0/BaseCST'.]
    at org.eclipse.xtext.generator.LanguageConfig.setUri(LanguageConfig.java:112)
    ... 41 more

所以我可能错过了什么?这个问题很容易重现。创建一个新的Xtext项目,添加依赖项,编辑语法并添加最后一条导入语句(“导入”http://...)并尝试生成Xtext工件。欢迎任何想法

提前谢谢
迈克尔

编辑:为了使用语法,您必须在MWE2工作流(参见Xtext文档(版本1.0.1)的第3.2.2.2节)中引用ecore模型的相应genmodel文件,例如

fragment = org.eclipse.xtext.generator.ecore.EcoreGeneratorFragement {
  referencedGenModels = "platform:/plugins/org.eclipse.ocl.examples.xtext.base/model/BaseCST.genmodel
} 

尽管如此,它仍然不适用于我


共 (1) 个答案

  1. # 1 楼答案

    CompleteOCL项目是包含Xtext项目的Eclipse工作区的一部分吗?如果是这样,您可以尝试使用您提到的平台URI引用Ecore文件:

    import "platform:/resource/org.eclipse.ocl.examples.xtext.base/model/BaseCST.ecore" as base
    

    而不是

    import "http://www.eclipse.org/ocl/3.0.0/BaseCST" as base
    

    如果CompleteOCL项目的捆绑包是Eclipse目标平台的一部分(例如,Eclipse安装的一部分),那么

    Couldn't resolve reference to EPackage 'http://www.eclipse.org/ocl/3.0.0/BaseCST'
    

    错误imho表示提供此EPackage的捆绑包未激活