java eclipse ant remote-debugging annotation-processing

java - Procesadores de anotación de depuración en eclipse



ant remote-debugging (2)

La forma más fácil es crear un complemento de eclipse y luego depurarlo directamente de eclipse. Suena mucho más difícil de lo que es, esto: https://www.youtube.com/watch?v=PjUaHkUsgzo es una guía de 7 minutos en youtube que puede ayudarlo a comenzar.

Estoy escribiendo un procesador de anotación simple e intentando depurarlo usando eclipse. Creé un nuevo proyecto para el procesador de anotaciones y configuré javax.annotation.processing.Processor en META-INF según sea necesario y procesa bien las anotaciones.

Luego, agregué más código y probé la depuración, pero nunca pude hacer que la ejecución se detuviera en los puntos de interrupción agregados en el procesador de anotación. Estoy compilando usando hormiga y estoy usando las siguientes opciones de ANT.

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

Después de activar Ant Build, voy a crear una configuración de depuración remota y el depurador comienza bien. La compilación Ant también comienza con éxito. Pero la ejecución nunca se detiene en ningún punto de corte agregado en el procesador de anotación.


Este es un problema que acabo de encontrar, y la solución del plugin eclipse me parece muy engorrosa. Encontré una solución más simple usando javax.tools.JavaCompiler para invocar el proceso de compilación. Usando el siguiente código, puede hacer clic derecho> Depurar como> JUnit Test en eclipse y depurar su procesador de anotación directamente desde allí

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