Отладка обработчиков аннотаций в eclipse

Я пишу простой обработчик аннотации и пытаюсь отладить его с помощью eclipse. Я создал новый проект для обработчика аннотаций и настроил javax.annotation.processing.Processor в META-INF по мере необходимости и отлично обрабатывает аннотации.

Затем я добавил еще несколько кодов и попытался отлаживать, но никогда не мог остановить выполнение на контрольных точках, добавленных в обработчик аннотации. Я компилирую с помощью ant, и я использую следующие параметры ant.

export ANT_OPTS = "- Xdebug -Xrunjdwp: transport = dt_socket, server = y, suspend = y, address = 8000"

После запуска ant build, я хочу создать удаленную конфигурацию отладки, и отладчик начнет нормально. ant build также запускается успешно. Но выполнение никогда не останавливается в любой точке останова, добавленной в обработчике аннотаций.

Ответ 1

Это проблема, с которой я столкнулся, и решение плагина eclipse кажется мне громоздким. Я нашел более простое решение, используя javax.tools.JavaCompiler для вызова процесса компиляции. Используя приведенный ниже код, вы можете просто щелкнуть правой кнопкой мыши > Debug As > JUnit Test в eclipse и отлаживать процессор аннотации непосредственно оттуда

   @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

Самый простой способ - создать плагин eclipse, а затем отладить его непосредственно из eclipse. Это звучит намного сложнее, чем это: https://www.youtube.com/watch?v=PjUaHkUsgzo - это 7-минутный справочник на YouTube, который может вас запустить.