4

我在尝试使 eclipse 和 aspectj 用于动态 Web 项目时遇到问题。我正在寻找编译时编织,以便可以使用 Eclipse 可视化功能。

我已按照此处给出的步骤进行操作:

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();
   }
}
}

[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>

[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)");
  }
}

但是,当我运行这个没有骰子时 - 方面只是不运行(servlet 写入响应,方面写入控制台)。我为常规的 java 项目做了类似的事情,效果很好。

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

我们的目标是通过 eclipse 在非 Spring 框架(或 Maven)项目的开发中非侵入性地运行 aspectj - 这应该很容易......但我无法让它工作。

任何关于 Eclipse 中 Web 应用程序的编译时编织教程的建议/参考都会很有用。应用服务器是嵌入式 Tomcat 6(但如果需要,可以升级到 Tomcat 7)。

在运行时调整开发环境而不影响生产代码的能力会很棒——如果它可以工作的话。响应非常感谢。

4

2 回答 2

6

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

您将使用 Roo 项目来使用正确的 AspectJ 库来提升您自己的项目。也就是说,您将只使用它生成的 pom 文件。您可以尝试使用纯 Eclipse 并下载所有插件(这就是我所做的),但它的 PITA 可以正确设置所有内容。

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

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

您还需要在 Eclipse 中将 Spring Aspects jar 添加到不是类路径/构建路径的“方面库”。

于 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 回答