java maven-2 annotations maven-plugin annotation-processing

java - ¿Cómo usar un procesador de anotación personalizado con Maven 2?



maven-2 annotations (1)

En nuestra aplicación empresarial, buscamos una forma dinámica de recopilar datos de nuestras clases de Java. Creamos una interfaz de anotación personalizada ( @interface ) con una propiedad de name . Nos gustaría recopilar el valor de esta propiedad de todas las clases anotadas.

Logré crear una AnnotationProcessorFactory y un AnnotationProcessor para la anotación personalizada. Como usamos Maven 2, agregué lo siguiente a los complementos en el pom.xml del proyecto principal.

<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>apt-maven-plugin</artifactId> <version>1.0-alpha-5</version> <configuration> <factory>our.company.api.component.lister.ComponentAnnotationProcessFactory</factory> </configuration> </plugin>

Esto reside en el proyecto principal que tiene varios subproyectos. La fábrica y el procesador personalizado se encuentran en uno de estos subproyectos. Las anotaciones personalizadas están dispersas a través de todos los subproyectos, por eso pongo el complemento en el pom.xml del proyecto principal.

El problema es cuando mvn apt:process el mvn apt:process una advertencia sobre las anotaciones sin procesadores y nuestra anotación personalizada está entre ellas. Supongo que esto significa que el complemento no puede encontrar la clase de fábrica.

¿Qué debo hacer para que el complemento pueda encontrar la fábrica y el archivo del procesador?

EDITAR:

La jerarquía del proyecto es muy simple:

main_project |-sub_project1 |... |-sub_projectn

El complemento está en el pom.xml del main_project . Solo asuma que la fábrica y el procesador están en sub_project1 y las anotaciones personalizadas están en sub_project2 , sub_project3 , ..., sub_projectn


Dos cosas para verificar:

  1. Asegúrese de que main_project (o el complemento) dependa del proyecto que contiene su ComponentAnnotationProcessFactory .
  2. La etiqueta de configuración <factory> del complemento Apt Maven no funcionó, pero el complemento encuentra la clase de fábrica si su nombre completo está en el archivo META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory . (Consulte la documentación de apt para obtener más detalles ).

Un mejor enfoque es utilizar las funciones de procesamiento de anotación de JDK 6 (en lugar del complemento Maven Apt) ya que no requiere el paquete com.sun y tools.jar de la carpeta lib del JDK.

<build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <configuration> <source>1.6</source> <target>1.6</target> <annotationProcessors> <annotationProcessor> com.example.annotationprocessor.Processor </annotationProcessor> </annotationProcessors> </configuration> </plugin> </plugins> </build>

Otras referencias: