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:
- Asegúrese de que
main_project
(o el complemento) dependa del proyecto que contiene suComponentAnnotationProcessFactory
. - 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 archivoMETA-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:
- Herramienta de procesamiento de anotaciones en el boletín de especialistas de Java
- ¿Cuál es el proceso de descubrimiento de procesadores de anotación predeterminado?