2014-01-29 10 views
10

Ich schreibe einen einfachen Annotationsprozessor und versuche, es mit Eclipse zu debuggen. Ich habe ein neues Projekt für den Annotationsprozessor erstellt und javax.annotation.processing.Processor unter META-INF nach Bedarf konfiguriert und verarbeitet die Anmerkungen gut.Debugging Annotation Prozessoren in Eclipse

Dann fügte ich noch mehr Code hinzu und versuchte das Debugging, konnte aber niemals die Ausführung an den im Annotationsprozessor hinzugefügten Breakpoints stoppen. Ich kompiliere mit Ameisen und ich verwende die folgenden ANT-Optionen.

Export ANT_OPTS = "- Xdebug -Xrunjdwp: transport = dt_socket, server = y, suspendiert = y, address = 8000"

Nach dem Auslösen Ant Build, ich gehe, um eine Debug-Remote-Konfiguration erstellen und der Debugger startet Fein . Ant Build wird ebenfalls erfolgreich gestartet. Die Ausführung wird jedoch nie an einem im Annotationsprozessor hinzugefügten Unterbrechungspunkt angehalten.

Antwort

18

Dies ist ein Problem, das ich gerade lief, und die Eclipse-Plugin-Lösung scheint mir sehr umständlich. Ich fand eine einfachere Lösung mit javax.tools.JavaCompiler, um den Kompilierungsprozess aufzurufen. Mit dem folgenden Code können Sie einfach mit der rechten Maustaste> Debuggen als> JUnit Test in Eclipse und debuggen Sie Annotation Prozessor direkt von dort

@Test 
    public void runAnnoationProcessor() throws Exception { 
     String source = "my.project/src"; 

     Iterable<JavaFileObject> files = getSourceFiles(source); 

     JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 

     CompilationTask task = compiler.getTask(new PrintWriter(System.out), null, null, null, null, files); 
     task.setProcessors(Arrays.asList(new MyAnnotationProcessorClass())); 

     task.call(); 
    } 

    private Iterable<JavaFileObject> getSourceFiles(String p_path) throws Exception { 
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 
    StandardJavaFileManager files = compiler.getStandardFileManager(null, null, null); 

    files.setLocation(StandardLocation.SOURCE_PATH, Arrays.asList(new File(p_path))); 

    Set<Kind> fileKinds = Collections.singleton(Kind.SOURCE); 
    return files.list(StandardLocation.SOURCE_PATH, "", fileKinds, true); 
    } 
2

Der einfachste Weg ist, ein Eclipse-Plugin zu erstellen und es dann direkt aus Eclipse zu debuggen. Es klingt viel schwieriger als es ist - das: https://www.youtube.com/watch?v=PjUaHkUsgzo ist ein 7-Minuten-Guide in Youtube, die Sie starten können.