問題タブ [compile-time-weaving]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
36279 参照

java - Spring の @Configurable の AspectJ コンパイル時の織り込みが機能しないのはなぜですか?

更新 5:最新の Eclipse ベースの最新の Spring ToolsSuite IDE をダウンロードしました。プロジェクトを Maven プロジェクトとしてインポートすると、Eclipse/STS はプロジェクトのビルドに Maven ゴールを使用しているように見えます。これは、AspectJ が最終的に Eclipse で正しく動作することを意味します。

更新 4: Eclipse のメカニズムを効果的にバイパスして、コンパイル時のウィービングに Maven + AspectJ プラグインを使用するだけになりました。

更新 3: AspectJ の Eclipse プラグインが、Tomcat に正しく公開する Eclipse の機能を壊しているようです。プロジェクトの AspectJ 機能を削除することによってのみ、プロジェクトを適切に公開できるようになります。とてもうるさい。

更新 2:これが Eclipse で動作するようになりました。これを言うのは非常に不快ですが、EclipseまたはMavenビルドからどのように機能するようになったのかわかりません。実行時の問題ではなく、コンパイルの問題のようです。

更新 1: Maven ビルドを介して動作するようになったようですが、方法がわかりません。Eclipse はまだ動作しません。pom.xmlで変更したのは、これらの (重要でない?) 構成パラメーターを追加したことだけです。

私は実際に、すべてが一貫して機能しないこの問題が繰り返されることを心配しています。詳細がわかり次第、この質問を更新していきます。

Eclipse に関しては、組み込みたいバイナリ アスペクト (この場合はspring-aspects.jar ) をクラスパスからコピーすることで、ある程度の進歩を遂げました。次に、この外部 jar をAspect Pathに追加します。これを行った後、Eclipse はコード内に AspectJ マーカーを適切に表示します。Mavenプラグインを介してMavenによって維持されているJavaビルドパスにspring-aspects.jarをそのままにしておくことができないのは面倒です。ただし、何らかの理由で、バイナリ アスペクトがAspect Pathに明示的に追加されない限り、AspectJ プラグインはバイナリ アスペクトを認識しません。


元の投稿: @Configurable は、Spring の外部でインスタンス化されたオブジェクトに依存関係を注入できるようにする Spring アノテーションです (たとえば、Hibernate またはいくつかの Factory クラスによって)。

以前、この注釈をロード時の織りで使用していましたが、ほとんど機能していました。時々、起動しても何も注入されませんでした。この問題により、この StackOverflow questionが発生しました。多くの回答はありませんでしたが、信頼性が高いため、代わりにコンパイル時のウィービングを試すことを提案する人がほとんどでした。

Eclipse および Maven 用の AspectJ プラグインをインストールしました。これらは両方とも、適切にコンパイルされたクラスのように見えるものを生成します。AspectJ をコンパイルする前に、クラスの 1 つをテキスト エディターで開いたところ、AspectJ への参照が見つかりませんでした。AspectJ のコンパイル後に開いたところ、Eclipse と Maven の両方で生成されたバージョンにorg.aspectj.weaver.MethodDeclarationLineNumberへの参照があります。これが、適切にコンパイルされていると想定する理由です。問題は、デプロイされると、依存関係が注入されないことです。

私のSpring applicationContext.xmlには以下が含まれています:

@Configurable とマークされたクラスが DI を実行するために必要なのは、上記のすべてですか? ロード時ウィービングからコンパイル時ウィービングへの変換中に、META-INF/aop.xml<context:load-time-weaver />applicationContext.xmlから削除し、Spring の Tomcat ウィーバーをcontext.xmlから削除しました。

この問題をさらに調査するにはどうすればよいですか? 考えられる原因は何ですか?

0 投票する
2 に答える
2430 参照

spring - Compile Time Weaving を使用した Spring @Configurable の起動パフォーマンス

これはスタック オーバーフローに関する私の最初の質問なので、親切にお願いします。

私はアプリを実行しています

  • 春 2.5.x
  • 設定可能な注釈
  • コンパイル時ウィービング (CTW)
  • メイヴン
  • Eclipse/ajdt

私はCTWを使用していますが、すべて正常に動作します。しかし、注釈付きクラスを初めてインスタンス化すると、非常に時間がかかります。2 回目は非常に高速です。

最初の呼び出しのプロファイラー スタック トレースを見ると、時間の 93% が org.aspectj.weaver.internal.tools.PointcutExpressionImpl.matchesMethodExecution(Method) によって使用されていることがわかりました

2 番目の呼び出しのスタック トレースでは、このメソッドで使用される時間はわずか 1% です。さらに悪いことに、最初の呼び出しは 2 番目の呼び出しの約 10 倍の時間がかかります。

CTWではウィーバーはもう必要ないと思っていたので、疑問に思っていました。

しかし、Spring は、誰かがこのクラスで new を呼び出すとすぐに、プロトタイプ化された Bean の分析を開始するようです。これは、aspectj ウィーバーを使用して何を行う必要があるかを分析し、次の呼び出しのためにこのプロセスを高速化する準備をします。

注釈付きクラスを初期化する最初の呼び出しを高速化した経験のある人はいますか?

これは私のpomのスニペットです:

0 投票する
1 に答える
1576 参照

spring - Springの側面を備えたコンパイル時のコードインストルメンテーションのAntターゲット

Netbeans6.7とAntを使用してWebアプリケーションを開発しました。Webアプリは機能しますが、依存性注入をより明確にするために@ConfigurableSpringアノテーションを使用するようにコードをリファクタリングしたいと思います。

Springアスペクトのロード時ウィービング(LTW)を断続的に機能させることができました(http://forum.springsource.org/showthread.php?t=86904を参照)。

この時点で、ツールセットでコンパイル時のウィービングを使用したいと思います。

コンパイル時にSpringアスペクトを織り込むために使用できるAntターゲットを誰かが提供できますか?

コードのコンパイル直後に新しいAntターゲットを実行するようにNetbeansを構成する方法を説明する人には、追加のクレジットが与えられます。

ありがとう。

0 投票する
4 に答える
8728 参照

java - Java 1.6 Annotation Processing を使用してコンパイル時のウィービングを実行するにはどうすればよいですか?

アノテーションを作成し、それを DTO に適用して、Java 1.6 スタイルの annotationProcessor を作成しました。私がやりたいことではない、annotationProcessor に新しいソース ファイルを書き込む方法を確認できます。既存のクラスを変更する方法を確認したり見つけたりすることはできません (理想的には、バイト コードを変更するだけです)。変更は実際にはかなり簡単です。プロセッサに実行させたいのは、処理中の注釈の値に由来する名前の新しい getter と setter を挿入することだけです。

私の注釈プロセッサは次のようになります。

0 投票する
1 に答える
2710 参照

java - AspectJ コンパイル時のウィービングを使用した Spring の原因: java.lang.VerifyError: 非仮想関数呼び出しの不正な使用

代わりに Spring の @AspectJ コンパイル時のウィービングを使用しようとしています<aop:autoproxy/>が、いくつかのエラーが発生しています。

最初に、コンパイル段階でいくつかの警告があります:

次に、メソッドをアドバイスしたいくつかのテストを実行しようとすると、次の例外が発生します。

AspectJ コンパイラを使用して試してコンパイルするために追加した Maven 構成は次のとおりです。

私は何を間違っていますか?また、これらのエラーの原因は何ですか?

ありがとう、ユヴァル

0 投票する
2 に答える
5363 参照

spring - 春のaspectj-コンパイル時のウィービング外部jar

アスペクトのコンパイル時ウィービングを使用するプロジェクトがあります。このプロジェクトは、jarとして含まれている別のプロジェクトに依存しています。コンパイル中にjarファイルにクラスを織り込みたい。どうすればこれを達成できますか。

ありがとう

0 投票する
1 に答える
14343 参照

aspectj - AspectJ - コンパイル時とロード時の織り方

私は、プロジェクトをコンパイルしてビルドするために、aspectJ のコンパイル時とロード時の織り方を理解し、何を使用するか (および ajc を使用する方法) を理解するのに苦労しています。

これが私のプロジェクト構造です:-

  • TestProject : Java サービス ライブラリ。これは、他のいくつかのプロジェクトで使用されています。このプロジェクトにはアスペクトが含まれていません。

  • TestProject-Aspects : TestProject
    のいくつかのクラスにアドバイスするアスペクトのみが含まれます。私は
    AspectJ5 アノテーション スタイルを使用しておらず、すべてのジョインポイントは現在メソッドの
    実行中です。

私の質問:

  • ajc と iajc の違いは?
  • 織る必要はありますか?

  • このようなものは機能しますか?

TestProject-Aspects のコンパイル

TestProject のコンパイル

  • javac をまったく使用する必要はありませんか? TestProjectをコンパイルするために最初に使用していたものはどれですか?
0 投票する
1 に答える
793 参照

jpa - Eclipse WTP を使用した EclipseLink の静的ウィービング

いくつかの JPA エンティティでデプロイする Eclipse WTP 内の Tomcat で実行されているプロジェクトがあります。これらのエンティティで ChangeTracking を有効にしたいのですが、これにはウィービングを有効にする必要があります。Tomcat では動的ウィービングが許可されていないため、静的ウィービングでこれを行う必要があります。

これは可能ですか?Eclipse の Dali プラグインには、静的なウィービングの機能がないようです。

0 投票する
0 に答える
592 参照

ant - iajc は jar からのアスペクトの織り込みに失敗しますが、クラス ファイルからは成功します

そこでiajc、intertype 宣言を適切に行うプロジェクト用のタスクを定義すると、project.jar を作成する別の jar タスクがあります。

次にiajc、junit テスト ターゲットのタスクがあります。このタスクは、次のように ITD をテスト クラスに織り込むことを目的として project.jar を参照します。

それは機能しません-コンパイラは次のようなエラーを生成しますclass "com....Foo" has to implement method doThings() defined in interface Bar

次に、を次のように変更<aspectpath>します。

これは基本的に、コンパイラによって生成された中間クラス ファイルを使用しており、うまく機能します。

次に、タスクoutjarの代わりにオプションを使用すると、その jar を で使用できることがわかりました。destdiriajc<aspectpath>

では、質問とコメントを次に示します。

<jar>Q. 通常のタスクで動作させるパラメータはありますか?

C. outjar を使用しなければならないという事実はまったく文書化されていません。jar を出力するオプションについて言及されていますが、それが機能する jar を生成する唯一の方法であるとはどこにも書かれていません。

0 投票する
2 に答える
2202 参照

eclipse - eclipse で maven を使用してコードをコンパイル/織り込みます

私はSpringのトランザクションコードを織り込むためにaspectjでコンパイル時の織りを使用しているので、@Transactional. Eclipse (aspectj-maven-plugin を使用) 内から maven compile を実行すると、Eclipse は Tomcat サーバーと同期し、すべてがうまくいきます。

しかし、Eclipse がコンパイル (プロジェクト -> 自動的にビルド) すると、Spring トランザクション コードが織り込まれていないように見え、次のエラーが発生します。

これは非常に面倒です。なぜなら、Eclipse が毎回コンパイルされた後に手動で maven compile を呼び出さずにコーディングしたいだけだからです。

AJDT プラグインの Aspect Path または inPath を編集する必要がありますか? Eclipse がビルドに maven を使用しないのはなぜですか?


私は使っている:

  • エクリプス WTP インディゴ
  • 春 3.0.5.リリース
  • JDK7 & Tomcat 7
  • m2eclipse & AJDT プラグイン

これらは、私の pom.xml の関連するフラグメントです。