如何为Eclipse嵌入式Tomcat启用编译时aspectj编织

Ale*_*lex 4 eclipse tomcat aspectj web-applications compile-time-weaving

我在尝试使eclipse和aspectj为Dynamic Web Projects工作时遇到了问题.我正在寻找编译时编织,所以我可以使用Eclipse Visualization功能.

我按照这里给出的步骤进行了操作:

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

使用Eclipse Indigo(3.7)和最新的Aspectj eclipse插件(2.1.3).

步骤如下:

[1]创建基本servlet

//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();
   }
}
}
Run Code Online (Sandbox Code Playgroud)

[2]将servlet添加到部署描述符(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>
Run Code Online (Sandbox Code Playgroud)

[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)");
  }
}
Run Code Online (Sandbox Code Playgroud)

然而,当我运行这个没有骰子 - 方面只是没有运行(servlet写入响应,方面到控制台).我做了类似的常规java项目,并且工作正常.

我注意到有一些指南可以将aop.xml添加到Web应用程序的META-INF目录中,但是这对我不起作用.

我们的目标是在非开发框架(或Maven)项目中通过eclipse非侵入性地运行aspectj - 这应该很简单..但我无法使其工作.

在eclipse中为web应用程序编译时编织的任何建议/参考教程都会很有用.应用服务器嵌入了Tomcat 6(但如果需要,可以升级到tomcat 7).

在不影响生产代码的情况下在运行时调整开发环境的能力将是很好的 - 如果它可以工作.回应非常感谢.

Ada*_*ent 6

我建议您只需下载并使用Spring STS(Spring的Eclipse)并下载/创建Spring Roo项目.

您将使用Roo项目使用正确的AspectJ库来增强您自己的项目.那就是你只需要使用它生成的pom文件.您可以尝试使用普通Eclipse并下载所有插件(这是我的工作),但是它的PITA可以正确设置所有内容.

关键是要运行AspectJ编译器而不是常规Java编译器.这需要一个特殊的Maven插件或Ant插件.您也不需要aop.xml文件.

如果您使用Eclipse,则需要确保将AspectJ特性添加到项目中(通常右键单击项目并选择"添加特性"或"转换为...".)

您还需要在Eclipse中将Spring Aspects jar添加到"Aspect Libraries"中,而不是classpath/buildpath.