在 Xtext 语法中集成 OCL 类型时出现问题
我正在开发一个语法(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
因此 Manifest.MF 文件中没有定义依赖项。如果我想在我的语法中重用 OCL 类型,我必须编写,例如
import "http://www.eclipse.org/ocl/3.0.0/BaseCST" as base
我添加了 org.eclipse.ocl.examples.xtext.base 依赖项,并且可以在我的语法中编写引用 (OCL) BaseCST 类型的规则。如果我尝试生成 Xtext artifcats,我会收到以下错误:
... 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 工件。欢迎任何想法!
提前致谢!< br> Michael
编辑:为了使用语法,您必须在 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
}
尽管如此,它仍然不为我工作。
I'm working on a grammar (Xtext project) where I want to reuse OCL types. Usually you refer in Xtext to existing types with an import statement, e.g.
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
There is already an example Xtext project (CompleteOCL) which integrates OCL types in a grammar. Unfortunately the project refers in its import statements to local plugins, e.g.
import "platform:/resource/org.eclipse.ocl.examples.xtext.base/model/BaseCST.ecore" as base
So there are no dependencies defined in the Manifest.MF file. If I want to reuse OCL types in my grammar I have to write for example
import "http://www.eclipse.org/ocl/3.0.0/BaseCST" as base
I've added the org.eclipse.ocl.examples.xtext.base dependency and can write rules in my grammar which refer to (OCL) BaseCST types. If I try to generate the Xtext artifcats I get the following error:
... 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
So probably I'missing something? The problem is quite easy to reproduce. Create a new Xtext project, add the dependency, edit the grammar and add the last import statement ("import "http://...") and try to generate the Xtext artifacts. Any ideas are welcome!
Thanks in advance!
Michael
EDIT: In order to use a grammar you have to refer in your MWE2 workflow (see section 3.2.2.2 of the the Xtext documentation (version 1.0.1)) to the corresponding genmodel file of the ecore model, for example
fragment = org.eclipse.xtext.generator.ecore.EcoreGeneratorFragement {
referencedGenModels = "platform:/plugins/org.eclipse.ocl.examples.xtext.base/model/BaseCST.genmodel
}
Nevertheless it's still not working for me.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
CompleteOCL 项目是包含 Xtext 项目的 Eclipse 工作区的一部分吗?如果是这样,您可以尝试使用您提到的平台 URI 来引用 Ecore 文件:
而不是
If the CompleteOCL 项目的捆绑包是您的 Eclipse 目标平台的一部分(例如,您的 Eclipse 安装的一部分),那么错误
恕我直言表明该捆绑包提供该EPackage未激活。
Is the CompleteOCL project part of the Eclipse workspace that contains your Xtext project? If so you could try to reference the Ecore file using the platform URI you mentioned:
instead of
If the CompleteOCL project's bundles are part of your Eclipse target platform (e.g., part of your Eclipse installation), then the
error imho indicates that the bundle providing this EPackage is not activated.
最好的办法应该是在 Eclipse 中安装该语法。
导入您的 CompleteOCL 项目。然后右键单击它>导出>可部署的插件和片段>选中CompleteOCL项目>然后单击单选按钮安装到主机>单击完成并重新启动Eclipse。
现在您应该能够将导入作为
import "http://www.eclipse.org/ocl/3.0.0/BaseCST" as base
问候,
Xavier
Your best shot should be to install that grammar within your eclipse.
Import your CompleteOCL project. Then right click on it>export>deployable plug-ins and fragments>check CompleteOCL project>and click the radio button install into host>Click finish and restart Eclipse.
Now your should be able to make your import as
import "http://www.eclipse.org/ocl/3.0.0/BaseCST" as base
Regards,
Xavier