1

M2T 用の Acceleo モジュールの作成に成功し、それを Java プログラムから実行しようとしています。これは私が試したものです:

String[] str = {"/home/hamza/workspace/HLRedundancy/model/System1.xmi", "/home/hamza/workspace/HLRedundancy/"};
Generate.main(str);

Generateは、私が作成した Acceleo モジュールの名前であり、したがって、Acceleo 生成メソッドを含む Java クラスの名前です。

これが私がいつも得ているエラーです:

Exception in thread "main" org.eclipse.acceleo.engine.AcceleoEvaluationException: The type of the first parameter of the main template named 'generateElement' is a proxy.
at org.eclipse.acceleo.engine.service.AcceleoService.doGenerate(AcceleoService.java:566)
at org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator.generate(AbstractAcceleoGenerator.java:193)
at org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator.doGenerate(AbstractAcceleoGenerator.java:158)
at HighLevelGenerator.main.Generate.doGenerate(Generate.java:250)
at HighLevelGenerator.main.Generate.main(Generate.java:160)
at Execute.main(Execute.java:11)

このエラーについてしばらく検索していましたが、その原因についてはわかりません。私の問題の解決策について何か考えはありますか?

ありがとう

4

3 に答える 3

0

acceleo モジュールの最初の行を確認してください。メタモデルの URI は何ですか? 'http://' で始まっていますか?

多分これが役立つかもしれません: Acceleoスタンドアロン - 最初のパラメータはプロキシです

于 2013-05-25T07:58:43.420 に答える
0

この問題の最も一般的な原因は、入力モデル (System1.xmi) に対応するメタモデルとファクトリを正しく登録できないことです。

生成されたクラス「Generate.java」のコメントを見ると、スタンドアロンで実行する場合に従うべき手順を示す場所がいくつかあることに気付くでしょう。最も重要なのは、メタモデルを登録する必要がある registerPackages から始まります。

モデルが読み込まれるポイントまで起動をデバッグすると (行の直後にブレークポイントを配置model = ModelUtils.load(newModelURI, modelResourceSet);)、model.eResource().getErrors()リストを見て、モデルの読み込み中にエラーが発生したかどうかを確認できます。

プロセスを説明しているこのビデオもご覧になることをお勧めします(登録が必要です)。

于 2013-02-20T08:04:37.640 に答える
0

この問題は、メタ モデルにサブパッケージが含まれていて、トップ パッケージにクラスが含まれていない場合に発生します。この問題を解決するには、最上位パッケージにダミー クラスを追加し、メタモデル コードを再生成します。それは私にとってはうまくいきました。

于 2020-11-04T18:01:23.600 に答える