4

動的 Web プロジェクトで Eclipse と Aspectj を機能させようとすると問題が発生します。Eclipse ビジュアライゼーション機能を使用できるように、コンパイル時のウィービングを探しています。

ここに記載されている手順に従いました:

https://forums.oracle.com/forums/thread.jspa?messageID=8591748

Eclipse Indigo (3.7) と最新の Aspectj Eclipse プラグイン (2.1.3) を使用します。

手順は次のとおりです。

[1]基本的なサーブレットを作成する

//imports omitted
public class MyServlet extends HttpServlet{

public void doGet(HttpServletRequest request, HttpServletResponse response){
   PrintWriter out= null;
   try {
      out = response.getWriter();
      out.write("hello from MyServlet");    
   } catch (IOException e) {
      e.printStackTrace();
   } finally {
      if(out!=null)
      out.close();
   }
}
}

[2] デプロイメント記述子 (web.xml) にサーブレットを追加する

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee      
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">

    <servlet>
       <servlet-name>MyServlet</servlet-name>
       <servlet-class>com.myCompany.MyServlet</servlet-class>
    </servlet>

    <servlet-mapping>
       <servlet-name>MyServlet</servlet-name>
       <url-pattern>/MyServlet/*</url-pattern>
    </servlet-mapping>

</web-app>

【3】アスペクトを作る

package com.myCompany;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public aspect MyServletAspect {

  pointcut doGet() :
     execution(public void MyServlet.doGet(HttpServletRequest,HttpServletResponse));

  after() returning : doGet() {
     System.out.println("Hello from doGet (via aspectj)");
  }
}

ただし、このノーサイコロを実行すると、アスペクトは実行されません (サーブレットは応答に書き込み、アスペクトはコンソールに書き込みます)。通常のJavaプロジェクトでも同様のことを行いましたが、うまくいきました。

Web アプリの META-INF ディレクトリに aop.xml を追加するためのガイドラインがあることに注意してください。ただし、これはうまくいきませんでした。

私たちの目標は、Spring 以外のフレームワーク (または Maven) プロジェクトの eclipse を介して、開発中に非侵襲的に aspectj を実行することです。これは簡単なはずですが、機能させることができませんでした。

Eclipse での Web アプリのコンパイル時のウィービングに関する提案やチュートリアルへの参照は役に立ちます。アプリ サーバーは Tomcat 6 に組み込まれています (ただし、必要に応じて tomcat 7 にアップグレードできます)。

本番環境のコードに影響を与えずに実行時に開発環境を微調整できる機能は、機能させることができれば素晴らしいことです。回答は大歓迎です。

4

2 に答える 2

6

Spring STS(Spring's Eclipse)をダウンロードして使用し、SpringRooプロジェクトをダウンロード/作成することをお勧めします。

Rooプロジェクトを使用して、正しいAspectJライブラリで独自のプロジェクトをブーストラップします。つまり、生成されたpomファイルを使用するだけです。プレーンなEclipseを使用して、すべてのプラグインをダウンロードしてみてください(これは私が行っていることです)が、すべてを正しくセットアップするためのPITAです。

重要なことは、通常のJavaコンパイラの代わりにAspectJコンパイラを実行させることです。これには、特別なMavenプラグインまたはAntプラグインが必要です。また、aop.xmlファイルは必要ありません。

Eclipseを使用している場合は、AspectJネイチャーがプロジェクトに追加されていることを確認する必要があります(通常、プロジェクトを右クリックして、[ネイチャーの追加]、[または変換...]を選択します)。

また、Eclipseでは、SpringAspectsjarをクラスパス/ビルドパスではない「アスペクトライブラリ」に追加する必要があります。

于 2012-04-03T19:33:59.717 に答える
1

Maven でコンパイル時ウィービングを使用するには、aspectj コンパイラ プラグインを使用する必要があります。これを参照してください:

http://maven.apache.org/maven-1.x/plugins/aspectj/

プロジェクトを Eclipse で動作させるには、m2eclipse 用の AspectJ プロジェクト コンフィギュレーターをインストールする必要があります (m2eclipse を使用していると仮定します)。Preferences -> Maven -> Discovery からインストールできます。カタログを開き、AJDT コンフィギュレーターを探します。

于 2012-04-04T18:10:54.130 に答える