Как включить ткачество аспекта во время компиляции для Eclipse, встроенного Tomcat - PullRequest
4 голосов
/ 03 апреля 2012

У меня возникла проблема при попытке заставить 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] Создать аспект <pre> <code>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, и это прекрасно работает.

Хочу заметить, что существуют инструкции по добавлению aop.xml в каталог META-INF веб-приложения, однако у меня это не сработало.

Наша цель - неинвазивно запускать aspectj в разработке с помощью eclipse для не-Spring Framework (или Maven) проекта - это должно быть легко ... но я не смог заставить его работать.

Были бы полезны любые предложения / ссылки на учебник по ткачеству во время компиляции для веб-приложений в Eclipse. В сервер приложений встроен Tomcat 6 (но при необходимости его можно обновить до Tomcat 7).

Было бы здорово настроить среду разработки во время выполнения, не оказывая влияния на производственный код - если бы его можно было заставить работать. Отзывы высоко оценены.

Ответы [ 2 ]

6 голосов
/ 03 апреля 2012

Я рекомендую вам просто загрузить и использовать Spring STS (Spring's Eclipse) и загрузить / создать Spring Roo проект .

Вы просто собираетесь использовать проект Roo для улучшения своего собственного проекта с правильными библиотеками AspectJ. То есть вы просто используете его файл pom, который он генерирует. Вы можете попробовать использовать простой Eclipse и загрузить все плагины (что я и делаю), но его PITA, чтобы все было правильно настроено.

Главное, чтобы компилятор AspectJ работал вместо обычного компилятора Java. Для этого требуется специальный плагин Maven или Ant. Также вам не нужен файл aop.xml.

Если вы используете Eclipse, вам нужно убедиться, что природа AspectJ добавлена ​​в проект (обычно вы щелкаете правой кнопкой мыши по проекту и выбираете «добавить природные объекты», «Или конвертировать в ...».)

Вам также потребуется добавить в Eclipse банку Spring Aspect jar в «Aspect Libraries», которая не является classpath / buildpath.

1 голос
/ 04 апреля 2012

Чтобы использовать ткачество времени компиляции в maven, вам нужно использовать плагин компилятора aspectj. Смотрите это:

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

Чтобы ваш проект работал в Eclipse, вам необходимо установить конфигуратор проекта AspectJ для m2eclipse (при условии, что вы используете m2eclipse). Вы можете установить его, перейдя в Настройки -> Maven -> Discovery. Откройте каталог и найдите конфигуратор AJDT.

...