3

Ich habe ein Problem beim Versuch, Eclipse und Aspectj arbeiten für dynamische Web-Projekte. Ich suche nach Kompilierzeit, damit ich die Eclipse-Visualisierungsfunktionen verwenden kann.So aktivieren Sie das kompilieren-time aspectj Weben für Eclipse Embedded Tomcat

Ich habe die hier angegebenen Schritten folgen:

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

mit Eclipse Indigo (3.7) mit der neuesten aspectj Eclipse-Plugin (2.1.3).

Die Schritte waren wie folgt:

[1] Erstellen grundlegende 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] In Servlet Entfaltungs discriptor (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] Create aspect

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

Allerdings wenn ich das ausführen keine Würfel - der Aspekt läuft einfach nicht (Servlet schreibt auf Antwort, Aspekt auf Konsole). Ich habe etwas Ähnliches für ein reguläres Java-Projekt gemacht und das funktioniert gut.

Es gibt Richtlinien für das Hinzufügen von aop.xml in das META-INF-Verzeichnis der Web-App, dies funktionierte jedoch nicht für mich.

Unser Ziel ist es, aspectj nicht-invasiv in der Entwicklung über Eclipse für ein Nicht-Spring Framework (oder Maven) Projekt zu betreiben - das sollte einfach sein ... aber ich konnte es nicht funktionieren lassen.

Alle Vorschläge/Verweis auf Tutorial zum Kompilieren Weben für Web-Anwendungen in Eclipse wäre nützlich. Der App-Server ist in Tomcat 6 eingebettet (kann jedoch bei Bedarf auf Tomcat 7 aktualisiert werden).

Die Möglichkeit, die Entwicklungsumgebung zur Laufzeit zu optimieren, ohne den Produktionscode zu beeinträchtigen, wäre großartig - wenn es funktioniert. Antworten sehr geschätzt.

Antwort

5

Ich empfehle, dass Sie einfach herunterladen und Spring STS (Spring's Eclipse) verwenden und herunterladen/erstellen Sie eine Spring Roo project.

Sie werden das Roo-Projekt verwenden, um Ihr eigenes Projekt mit den richtigen AspectJ-Bibliotheken zu verbessern. Das heißt, Sie verwenden nur seine Pom-Datei, die es generiert. Sie können versuchen, einfach Eclipse zu verwenden und alle Plugins herunterzuladen (was ich tue), aber seine PITA, um alles richtig einzurichten.

Das Wichtigste ist, dass der AspectJ-Compiler anstelle des regulären Java-Compilers ausgeführt wird. Dies erfordert ein spezielles Maven-Plugin oder Ant-Plugin. Außerdem benötigen Sie die Datei aop.xml nicht.

Wenn Ihr Eclipse müssen Sie sicherstellen, dass die AspectJ Natur zum Projekt hinzugefügt wird (in der Regel rechts Sie auf das Projekt klicken und wählen Sie „add Naturen“ „Oder konvertieren ...“.)

Sie müssen auch in Eclipse das Spring Aspects-Jar zu den "Aspect Libraries" hinzufügen, was nicht der Klassenpfad/Buildpfad ist.

+0

Danke dafür - aber arbeiten mit einem Pre-Spring-Legacy-System; Ein anderes Projekt wie Roo einzubinden, fühlt sich an wie Overkill. – Alex

+0

Nein, Sie werden nur die Pom-Datei für Sie erstellen, da dies der schwierige Teil ist, da Sie den AspectJ-Compiler anstelle des Javac-Compilers ausführen müssen. Was am wahrscheinlichsten passiert, ist, dass Sie den AspectJ-Compiler nicht ausführen. –

+0

Diese Antwort annehmend - auf Roo schauend, scheint es, Aspectj zu benutzen, um seine Magie zu machen. (http://static.springsource.org/spring-roo/reference/html/architecture.html#architecture-critical-technologies-aspectj). Der Vorschlag, ein generiertes Projekt für die Bibliotheksimporte und Projekteinstellungen zu extrahieren, ist gut. – Alex

1

Um die Kompilierzeit in Maven zu verwenden, müssen Sie das Aspectj Compiler-Plugin verwenden.Siehe dazu:

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

Ihr Projekt Um in Eclipse arbeiten, müssen Sie die AspectJ Projekt-Konfigurator für m2eclipse installieren (vorausgesetzt, Sie verwenden m2eclipse). Sie können es unter Einstellungen -> Maven -> Discovery installieren. Öffnen Sie den Katalog und suchen Sie nach dem AJDT-Konfigurator.

+0

Deshalb habe ich ihn Spring STS installieren lassen, weil Sie manchmal die falsche Kombination von Plugins (m2eclipse + ajdt) bekommen können. Und wenn er ein Roo-Projekt erstellt, wird das alles für ihn tun. –

+0

STS wäre der Weg in diesem Fall zu gehen. –