1

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
} 

それにもかかわらず、それはまだ私にとってはうまくいきません。

4

2 に答える 2

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'

error imho は、この EPackage を提供するバンドルがアクティブ化されていないことを示します。

于 2010-09-28T06:47:11.750 に答える
0

あなたの最善の策は、Eclipse 内にその文法をインストールすることです。CompleteOCL プロジェクトをインポートします。次に、それを右クリック>エクスポート>デプロイ可能なプラグインとフラグメント> CompleteOCLプロジェクトをチェック>ホストにインストールするラジオボタンをクリック>終了をクリックしてEclipseを再起動します。

これで、次のようにインポートできるはずですimport "http://www.eclipse.org/ocl/3.0.0/BaseCST" as base

よろしく、

ザビエル

于 2011-02-16T12:19:53.487 に答える