Как шаг-отладка аннотации процессора во время компиляции?
У меня есть обработчик аннотаций для аннотации политики хранения=SOURCE.
Я не знаю, как его отладить.
Я выпустил инструкции печати, информацию регистратора при запуске mvn install, compile или package или Ant javac, и я вижу их sysouts в журнале компиляции.
однако я понятия не имею, как выполнить отладку процессора в Eclipse. Я имею в виду, как вы step-debug время компиляции?
3 ответов
вы должны вызвать компилятор Java из Eclipse, используя конфигурацию отладки (вам нужно будет создать конфигурацию вручную, из "конфигурации отладки..." выбор меню.
"правильный" способ вызова компилятора Java в JDK 1.6 или выше-использовать JavaCompiler интерфейс javax.инструменты, который вы получаете от ToolProvider (Я включаю все ссылки, потому что есть приличное количество класса / пакета документация, которую вы должны прочитать).
"быстрый и грязный" способ (это должны работа, но я не даю никаких гарантий), чтобы вызвать com.sun.tools.javac.Main.main()
, передавая ему ваши обычные аргументы командной строки. Для этого вам понадобится tools.jar
на вашем пути к классам (он находится в $JAVA_HOME/lib
).
в последнее время можно использовать что-то вродеhttp://github.com/google/compile-testing который позволяет вызывать задание компиляции для произвольных процессоров аннотаций,в которых можно задать точки останова, шаг вперед и т. д.
@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);
}
этот тест ожидает, что вы получите сообщение об ошибке, потому что @MyAnnotation неправильно объявлен в источнике тестовых данных. Если это утверждение не выполняется, вы можете запустить его в режиме отладки в IDE, установить точки останова в MyProcessor, и шаг через с полной средой компилятора, активной во время отладки.
для модульного тестирования конкретных методов внутри ваш процессор, вы также можете использовать @Rule под названием CompilationRule, из которого вы можете получить элементы и типы классов утилит для тестирования конкретной логики в вашем компиляторе более изолированным способом.
обработка аннотаций происходит во время компиляции, поэтому обычная отладка не будет работать. Если вы хотите отладить его в контексте проекта, вы можете использовать удаленную отладку Eclipse, имея Gradle или Maven в режиме отладки. Затем вы можете поместить точки останова в файлы обработчика аннотаций.
посмотреть отладка процессора аннотаций в любом проекте.
отказ от ответственности: я написал пост.