1

我正在研究一个要重用 OCL 类型的语法(Xtext 项目)。通常您在 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

因此 Manifest.MF 文件中没有定义依赖项。如果我想在我的语法中重用 OCL 类型,我必须编写例如

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

我添加了 org.eclipse.ocl.examples.xtext.base 依赖项,并且可以在我的语法中编写引用(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 项目,添加依赖项,编辑语法并添加最后一个导入语句(“import”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
} 

尽管如此,它仍然不适合我。

4

2 回答 2

0

你最好的办法应该是在你的日食中安装那个语法。导入您的 CompleteOCL 项目。然后右键单击它>导出>可部署插件和片段>检查 CompleteOCL 项目>并单击单选按钮安装到主机>单击完成并重新启动 Eclipse。

现在您应该能够将您的导入为import "http://www.eclipse.org/ocl/3.0.0/BaseCST" as base

问候,

泽维尔

于 2011-02-16T12:19:53.487 回答
0

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'

错误恕我直言,表示提供此 EPackage 的捆绑包未激活。

于 2010-09-28T06:47:11.750 回答