2

これが私の問題です。EclipseEMFプロジェクトがあり、モデルを構築し、対応するコードを生成し、モデルに対応するいくつかのフレームワーククラスを手動でプログラムしました。

Eclipseウィザードを使用して、プロジェクトをJava Emitter Template(JET)変換プロジェクトに適合させました(これにより、JETプロジェクトが最初から作成したものと同じ構成がMANIFESTに生成されないことに気付きました...)

「引数」に入力された内容に基づいて、アプリケーションのメインクラスのコードを生成するJavaクラスを作成するJETファイルを作成しました。

次に、動的インスタンスを作成し、作成した.xmiファイルにモデルに従っていくつかのノードを設定しました。

ここで私が行ったのは、JETトランスフォーメーションの実行構成を作成することでした。入力として、.xmiファイルを渡し、トランスフォーメーションIDコンボボックスで使用できる2つのうちの1つを使用しようとしています...

トランスフォーメーションIDをjet2に選択すると、コンソールに次の出力が表示されます。

templates/main.jet(8,1):  <c:setVariable var='org.eclipse.jet.taglib.control.iterateSetsContext' select='true()'>
    Trace: completed action. 
templates/main.jet(29,1):  <c:if test='isVariableDefined(''org.eclipse.jet.resource.project.name'')'>
    Trace: processing body
templates/dump.jet(2,1):  <c:dump select='/*' format='true' entities='true'>
    Trace: completed action. 
templates/main.jet(30,5):  <ws:file template='templates/dump.jet' path='{$org.eclipse.jet.resource.project.name}/dump.xml'>
    Trace: completed action. 
Successful Execution

代わりに、Transformation IDをorg.eclipse.jet.transforms.taglib.doc(他の唯一のオプション)に選択すると、次のようになります。

templates/control.jet(8,1):  <c:setVariable var='jetPluginNS' select='''org.eclipse.jet'''>
    Trace: completed action. 
templates/control.jet(9,1):  <c:setVariable var='tagLibrariesXP' select='concat($jetPluginNS, ''.tagLibraries'')'>
    Trace: completed action. 
templates/control.jet(15,1):  <c:setVariable var='pluginNS' select='$org.eclipse.jet.resource.project.name'>
    Trace: completed action. 
templates/control.jet(16,1):  <c:setVariable var='docPlugin' select='concat($org.eclipse.jet.resource.project.name, ''.doc'')'>
    Trace: completed action. 
templates/control.jet(21,5):  <c:iterate select='/plugin/extension[@point = $tagLibrariesXP]' var='extension'>
    Trace: loop initialized
templates/control.jet(21,5):  <c:iterate select='/plugin/extension[@point = $tagLibrariesXP]' var='extension'>
    Trace: finished loop
templates/control.jet(69,5):  <c:iterate select='/plugin/extension[@point = $tagLibrariesXP]' var='extension'>
    Trace: loop initialized
templates/control.jet(69,5):  <c:iterate select='/plugin/extension[@point = $tagLibrariesXP]' var='extension'>
    Trace: finished loop
Successful Execution

どちらの場合も、生成されたJavaクラスをgenerateメソッドから取得しませんが、どちらも成功したと言います...また、最初のケースのコンソールメッセージでは、dump.xmlファイルが種類で生成されていることがわかりますそのファイルのxmiからxmlへの変換。ただし、JavaまたはJET生成クラスで作成するように定義したメソッドとの関連付けはありません。

また、前述のdump.xmlファイルを生成した後、それを入力として使用しようとすると、Applicationオブジェクトが見つからないか抽象的であることが通知されます。実際、生成されたパッケージからのものは確かにインターフェイスですが、Implを使用しようとしても同じエラーが発生し、これに到達するために行ったすべての手順のために、正しく動作しているかどうかさえわかりませんdump.xmlファイル。

私は何が間違っているのですか?誰か助けてくれませんか?

前もって感謝します!

4

1 に答える 1

2

変換IDには2つの選択肢しかなかったので、JET変換プロジェクトを作成しなかったと言います。その場合、その変換IDは構成ダイアログのドロップダウンリストに表示されます。

まず、新しいプロジェクトウィザードを使用して、新しいJET変換プロジェクトを作成します。新しいトランスフォームのデフォルトの動作は、入力モデルファイルを含む同じプロジェクトのルートディレクトリにあるdump.xmlという名前のファイルに入力モデルをダンプすることです。このJETプロジェクトが作成されたら、構成の実行ダイアログを使用して、XMLファイルに対して変換を実行します。作成されたdump.xmlファイルを見ると、JETが使用している実際のモデルがわかります。EMFモデルは循環的である可能性がありますが、JETはEMFモデルを本質的に階層的なサブセットに適合させます。

有効なモデル(dump.xmlファイルにあるモデル)を確認したら、そのモデルを使用して必要なファイルを生成するようにテンプレートを作成または変更できます。

また、質問の言い回しでは、クラス用に単一のJETテンプレートを作成したようですが、JETには、MVCの意味でコントローラーとして機能し、他のアプリケーションを適用する役割を担う、通常main.jetと呼ばれるテンプレートも必要です。 JETプロジェクトのJETテンプレートをモデルに追加し、生成されたコンテンツの結果のファイル名を指定します。

于 2012-08-17T16:27:12.643 に答える