2012-10-04 17 views
9

Mam procesor adnotacji do adnotacji o polityce przechowywania = SOURCE.Jak przerwać debugowanie procesora adnotacji podczas kompilacji?

Nie mam pojęcia, jak go usunąć.

  • I wydały oświadczenia drukowania informacji rejestratora gdy uruchomię mvn zainstalować pakiet lub skompilować lub ant javac i widzę ich sysouts w dzienniku kompilacji.

  • Jednak nie mam pojęcia, jak krok-debugować procesor w Eclipse. Mam na myśli, jak krok debugować kompilację?

Odpowiedz

5

Trzeba powołać kompilator Java z Eclipse, używając konfiguracji debugowania (trzeba stworzyć konfigurację ręcznie, z "Debug Configurations ..." wyboru menu.

The " poprawnym "sposobem wywołania kompilatora Java w JDK 1.6 lub nowszym jest użycie interfejsu JavaCompiler w javax.tools, który otrzymasz od ToolProvider (dołączam wszystkie linki, ponieważ jest przyzwoita ilość dokumentacji klasy/pakietu, którą powinieneś przeczytać).

"Szybko-brudny" sposób (który powinno być działa, ale ja nie daje żadnych gwarancji) jest wywołanie com.sun.tools.javac.Main.main(), przekazując mu swoje normalne argumenty wiersza polecenia. Aby to zrobić, musisz tools.jar w swojej ścieżce klas (znajduje się ona w $JAVA_HOME/lib).

+0

Witam, przeczytanie tej odpowiedzi jako zaakceptowanej, spraw, żebym myślał, że to rozwiązanie problemu. Nawiasem mówiąc, nie rozumiem, co "wywołuję kompilator Java z Eclipse, używając konfiguracji debugowania (musisz utworzyć konfigurację ręcznie, z" Konfiguracji debugowania. "Oznacza: czy możesz wyjaśnić lepiej proszę? Dzięki – Apperside

+0

Dodałem tools.jar i jar procesora do istniejącego projektu, a następnie skorzystałem z sugerowanej klasy com.sun.tools.javac.Main Utworzono konfigurację debugowania aplikacji Java za pomocą tools.jar w ścieżce klas, a argumenty javac jako Argumenty programowe, działały jak czar - dzięki! – wbdarby

6

opcja w ostatnich czasach jest użycie czegoś podobnego http://github.com/google/compile-testing który pozwala przywołać pracę kompilacji przed arbitralnymi procesorów adnotacji, które można ustawić punkty przerwy, krok po kroku, itp

@Test public void testStuff() { 
    // Create a source file to process, or load one from disk. 
    JavaFileObject file = JavaFileObjects.fromSourceLines("test.Foo", 
    "package test;", 
    "", 
    "import bar.*;", 
    "", 
    "@MyAnnotation(blah=false)", 
    "interface TestInterface {", 
    " Bar someBar();", 
    "}", 

    // assert conditions following a compilation in the context of MyProcessor. 
    assert_().about(javaSource()).that(file) 
     .processedWith(new MyProcessor()) 
     .failsToCompile() 
     .withErrorContaining("some error message").in(file).onLine(5); 
} 

Test oczekuje cię otrzyma komunikat o błędzie, ponieważ @MyAnnotation jest niepoprawnie zadeklarowany w źródle danych testu. Jeśli to stwierdzenie nie powiedzie się, możesz uruchomić go w trybie debugowania w IDE, ustawić punkty przerwania w MyProcessor i krok po kroku z pełnym środowiskiem kompilatora aktywnym podczas debugowania.

Do testowania konkretnych metod w ramach jednego procesora można również użyć @Rule o nazwie CompilationRule, z którego można uzyskać klasy narzędziowe Elements i Typ, aby przetestować określoną logikę w kompilatorze w bardziej izolowany sposób.

2

Przetwarzanie adnotacji występuje podczas kompilacji, więc normalne debugowanie nie będzie działać. Jeśli chcesz debugować go w kontekście twojego projektu, możesz użyć zdalnego debugowania Eclipse, mając jednocześnie Gradle lub Maven w trybie debugowania. Następnie możesz umieścić punkty przerwania w plikach Procesora adnotacji.

Zobacz Debugging an Annotation Processor in any project.

Nota prawna: Napisałem post.

Powiązane problemy