Saltar al contenido

Depuración de procesadores de anotaciones en eclipse

Comprende el código bien previamente a usarlo a tu trabajo si ttienes algo que aportar puedes decirlo en los comentarios.

Solución:

Este es un problema que acabo de encontrar, y la solución del complemento 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 código a continuación, puede simplemente hacer clic derecho> Depurar como> Prueba JUnit en eclipse y depurar su procesador de anotaciones directamente desde allí

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

      Iterable 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 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 fileKinds = Collections.singleton(Kind.SOURCE);
     return files.list(StandardLocation.SOURCE_PATH, "", fileKinds, true);
   

La forma más sencilla es crear un complemento de eclipse y luego depurarlo directamente desde 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.

Esta pregunta se publicó hace más de 6 años, sin embargo, ahora me encontré con el mismo problema y todavía no podía encontrar una buena respuesta en Internet.

Finalmente pude encontrar una buena configuración que me permite desarrollar un procesador de anotaciones, usarlo en la compilación de otro proyecto y depurarlo según sea necesario.

La configuración es así:

  1. Procesador de anotación desarrollado en un proyecto con GAV:

    infra
    annotation-processor
    1.0-SNAPSHOT

  2. En el archivo POM del procesador de anotaciones, especifiqué lo siguiente:

    org.apache.maven.plugins
    maven-compiler-plugin
    $maven.compiler.plugin.version

    -proc:none$java.source.version
    $java.source.version
    UTF-8

    Observe la -proc:none especificación.

  3. En el proyecto donde se usa el procesador de anotaciones, se usa durante la compilación del proyecto. Es decir, el procesador de anotaciones se invoca durante la ejecución del compilador, javac. Descubrí que para depurar la ejecución del procesador de anotaciones mientras se ejecuta javac directamente, puedo usar la siguiente línea de comando:

    javac -J-agentlib: jdwp = transport = dt_socket, server = y, suspend = y, address = 1044 -d target / classes -proc: only -processor infra.annotation.CustomizationAnnotationProcessor -cp ../annotation-processor/target/ procesador-de-anotaciones-1.0-SNAPSHOT.jar src main java org digital annotationtest MyTestClass.java

    Observe la suspend=y parte en la línea de comando de javac. Esto le dice a la JVM que suspenda la ejecución hasta que el depurador se conecte a ella.

  4. En esta situación, puedo iniciar el depurador de eclipse iniciando una configuración de depuración de aplicación Java remota. Configúrelo para usar el proyecto del procesador de anotaciones y adjúntelo al proceso en el host local y el puerto 1044. Esto le permite depurar el código del procesador de anotaciones. Si establece un punto de interrupción en el init o process métodos, el depurador se romperá.

  5. Para habilitar la misma experiencia de depuración al compilar usando Maven, configuro el archivo POM de la siguiente manera:

    1. Agregue una dependencia al POM donde se usa el procesador de anotaciones:


      infra
      annotation-processor
      1.0-SNAPSHOT

    2. En el mismo proyecto, utilizando el procesador de anotaciones, defina lo siguiente:


    org.apache.maven.plugins
    maven-compiler-plugin
    $maven.compiler.plugin.version
    1.8
    1.8
    true

    -J-verbose
    $enableDebugAnnotationCompilerArg

    true


    infra
    annotation-processor
    1.0-SNAPSHOT



    infra.annotation.CustomizationAnnotationProcessor

    debugAnnotation -J-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=1044

    Observe el uso de true, y $enableDebugAnnotationCompilerArg.
    Además, observe la definición de perfil de debugAnnotation y la definición de la propiedad. Esto nos permite iniciar una sesión de depuración del procesador de anotaciones ejecutando mvn -P debugAnnotation package y adjuntar el depurador de eclipse al proceso del compilador de la misma manera que se describe en 4 arriba.

valoraciones y comentarios

Agradecemos que quieras defender nuestra misión escribiendo un comentario o valorándolo te estamos eternamente agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *