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í:
-
Procesador de anotación desarrollado en un proyecto con GAV:
infra
annotation-processor
1.0-SNAPSHOT -
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
UTF-8
Observe la
especificación.-proc:none -
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 ejecutajavac
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 dejavac
. Esto le dice a la JVM que suspenda la ejecución hasta que el depurador se conecte a ella. -
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
oprocess
métodos, el depurador se romperá. -
Para habilitar la misma experiencia de depuración al compilar usando Maven, configuro el archivo POM de la siguiente manera:
- Agregue una dependencia al POM donde se usa el procesador de anotaciones:
infra
annotation-processor
1.0-SNAPSHOT
- 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
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
, ytrue
.$enableDebugAnnotationCompilerArg
Además, observe la definición de perfil dedebugAnnotation
y la definición de la
propiedad. Esto nos permite iniciar una sesión de depuración del procesador de anotaciones ejecutandomvn -P debugAnnotation package
y adjuntar el depurador de eclipse al proceso del compilador de la misma manera que se describe en 4 arriba. - Agregue una dependencia al POM donde se usa el procesador de anotaciones:
valoraciones y comentarios
Agradecemos que quieras defender nuestra misión escribiendo un comentario o valorándolo te estamos eternamente agradecidos.