3

我在尝试使eclipse和aspectj适用于Dynamic Web Projects时遇到问题。我正在寻找编译时间编织,所以我可以使用Eclipse可视化功能。如何为Eclipse嵌入式Tomcat启用编译时aspectj编织

我已经按照这里的步骤:

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

使用Eclipse靛蓝(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目录指引,但是这并没有为我工作。

我们的目标是在非Spring框架(或Maven)项目中通过eclipse在开发过程中无损地运行aspectj - 这应该很容易......但我一直无法使其工作。

任何建议/参考教程编译时在蚀织为网络应用程序将是有益的。应用程序服务器是嵌入式Tomcat 6(但可以根据需要升级到Tomcat 7)。

来调整运行时的开发环境,在不影响产品的代码将是巨大的能力 - 如果它可以进行工作。 非常感谢的回应。

回答

5

我建议你下载并使用Spring STS(Spring的Eclipse)并下载/创建一个Spring Roo project

你只是要使用Roo的项目,自举用正确的AspectJ库自己的项目。那就是你将使用它生成的pom文件。你可以尝试使用普通的Eclipse并下载所有的插件(这就是我所做的),但是它的PITA可以正确地设置所有的东西。

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

如果你使用Eclipse,你需要确保AspectJ的性质被添加到项目中(通常你右击该项目并选择“添加本性”“或者转换为...”。)

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

+0

感谢此 - 但与春季遗留系统工作;堵塞像Roo这样的另一个项目就像是矫枉过正。 – Alex 2012-04-03 19:54:06

+0

不,你只需要让它为你创建pom文件,因为这是棘手的部分,因为你需要运行AspectJ编译器而不是javac编译器。最有可能发生的是你没有运行AspectJ编译器。 – 2012-04-03 20:07:15

+0

接受这个答案 - 看Roo它似乎使用Aspectj来发挥它的魔力。 (http://static.springsource.org/spring-roo/reference/html/architecture.html#architecture-critical-technologies-aspectj)。关于为图书馆进口和项目性质设置挖掘生成的项目的建议是一个很好的建议。 – Alex 2012-11-07 20:08:59

1

要在maven中使用编译时编织,您需要使用aspectj编译器插件。看到这一点:

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

为了让您的项目在Eclipse中工作,你需要安装m2eclipse的AspectJ的项目配置器(假设你使用m2eclipse的)。您可以通过转到首选项 - > Maven - >发现来安装它。打开目录并查找AJDT配置器。

+0

这就是为什么我要让他安装Spring STS,因为你有时会得到错误的插件组合(m2eclipse + ajdt)。如果他创建了Roo项目,它将为他设置这一切。 – 2012-04-05 01:52:50

+0

在这种情况下,STS将是最好的选择。 – 2012-04-06 02:34:33

相关问题