OCL 型を再利用したい文法 (Xtext プロジェクト) に取り組んでいます。通常、Xtext では import ステートメントを使用して既存の型を参照します。
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
OCL 型を文法に統合するサンプル Xtext プロジェクト (CompleteOCL) が既に存在します。残念ながら、プロジェクトはインポートステートメントでローカルプラグインを参照しています。
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
}
それにもかかわらず、それはまだ私にとってはうまくいきません。