0

こんにちは、私はacceleoに非常に慣れていません

私のプロジェクトでは、さまざまな acceleo テンプレートを呼び出す Java ドライバー クラスがあります。一部のテンプレートには、EObject タイプのないパラメーターがあります。テンプレート用に生成された Java モジュールの initialize() および doGenerate() 関数を呼び出しています。直面している問題は次のとおりです。

  1. initialize() は、最初の引数が Ecore オブジェクトであり、残りのパラメーターが List であることを想定しています。ただし、前述したように、一部のテンプレートには EObject パラメータがありません。このようなテンプレートを Java アプリケーションから呼び出すにはどうすればよいですか?

  2. 上記の問題を回避するために、ドライバーとテンプレートを調整して、最初のパラメーターとしてダミーの EObject を設定しました。次に、テンプレートを正常に呼び出しますが、出力は生成されません。ただし、別のドライバー テンプレートからテンプレートを呼び出すと、テンプレートは出力を生成します。ただし、データ モデルの複雑な分析が必要なため、ドライバー プログラムを MTL で記述したくありません。

私の場合、どのように進めればよいかアドバイスをお願いします。

ありがとう&よろしく
ダヌンジャヤ M.

4

1 に答える 1

1

「メイン」テンプレートのモジュールと Acceleo の「ファサード」クラスとともに生成する Java クラスを通じてデフォルトで公開する API は、呼び出されるテンプレートの最初のパラメーターとして EObject があることを常に前提としています。これは、ほとんどのユース ケースでの使用を容易にするために作成されました (このユース ケースは全体の 90% になると予想されます)。

他のユースケースでは、これらのファサードの背後にある API を利用する必要があります。つまり、単に EObject がない場合に、EObject をパラメータとしてとらない別の「初期化」メソッドを作成できます。次に、「generate(Monitor)」メソッドもオーバーライドして、AcceleoService.doGenerate を使用しないようにする必要があります... またはそのための AcceleoService の他のメソッド: これは、私が話していた「ファサード」クラスです。

必要なのは、呼び出す必要があるテンプレートを見つけるために EObject に依存せずに、AcceleoService.doGenerate が行うことを模倣するメソッドを呼び出すことです。Acceleo の SDK またはソースが手元にない場合は、github からコードを確認できます: AcceleoService#doGenerate

于 2012-04-11T08:23:51.513 に答える