0

このプロジェクトを AspectJ (ajc) で正しく織り上げるのに問題がありました。状況は次のとおりです。

私は DaCapo Benchmarks というベンチマーク ライブラリを使用しており、その中で Iterator.HasNext() および Next() へのすべての呼び出しをインターセプトしようとしています [学術研究]。これは真空で動作しているように見えますが、DaCapo は、独自の jar に他の jar が含まれ、依存関係と共に実行したいベンチマークに従って抽出して実行するように動作します。

すべての HasNext() と Next() を同じ側面で傍受したいので、個々の jar ファイルではなく、すべての jar ファイルで合計が追跡されます。

私が十分に明確に出くわしていることを願っています。この奇妙な問題を解決するために、ご質問があればいつでもお答えします。

PS実際には実行できないという奇妙な感じがありますが、AJDTを使用したEclipseでのテスト(DaCapo Benchmarksの織り方にajcを使用して生のaspectjを使用しています)は、可能性を示唆しています.

4

2 に答える 2

1

手遅れであることはわかっていますが、他の誰かを助けるかもしれません。.

あなたの質問から私が理解したのは、複数の瓶で同じ側面を波にしたいということです。

したがって、2つの方法があります

  1. 日食を使用している場合:

次に、アスペクト プロジェクトを作成し、そのプロパティに移動します > 左側のパネルでアスペクト ビルド オプションをクリックします > 右側のパネルで inpath タブを選択します > 外部 jar の追加をクリックします > アスペクトを振りたい jar を追加します > OK をクリックします

再びそのプロパティに移動し、左側のパネルでアスペクト ビルド オプションをクリックし、右側のパネルで [出力 jar] タブを選択し、作成する新しい jar の名前を指定します。.> [OK] をクリックします。

アスペクトを作成して記述し、プロジェクトをビルドまたはクリーンアップします。「出力 jar」で指定した名前でプロジェクトのルート ディレクトリに jar が生成され、この jar には、アスペクトが waved の inpath jar で指定したすべての jar が含まれます。. それでおしまい 。.

  1. コマンド propmt を使用している場合:

    必要なメソッドをインターセプトするためのアスペクトを記述します。> コマンドプロンプトで次のコマンドを起動します。

    ajc -inpath myJar1.jar -inpath myJar2.jar myAspect.java -outjar MyOutputJar.jar

これで、 inpath で言及したすべての jar を含む最終的な jar が生成されます。. -inpath は、コードをウェーブしたい jar の数だけ使用できます。依存関係エラーの場合は、必要な依存関係 jar をクラスパスに指定します。

于 2014-07-08T11:23:22.977 に答える
0

ロード時の織りを使用している場合、これが可能である可能性はほとんどありません。循環性の問題があります。JDKをウィービングする必要がありますが、ウィーバーはそれ自体をロードするためにJDKを必要とし、JDKの多くの部分をLTWを使用してウィービングすることはできません。

したがって、コンパイル時のウィービングを行う必要があります。このようなものが機能します:

ajc -inpath rt.jar -outjar woven_rt.jar *.aj

これがあなたが抱えている問題であるかどうかはわかりませんが、問題が解決する可能性があります。

于 2011-10-01T21:41:38.663 に答える