6

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 name. Nos gustaría recopilar el valor de esta propiedad de todas las clases anotadas.¿Cómo usar un procesador de anotación personalizado con Maven 2?

Logré crear un 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 emite el comando mvn apt:process recibí una advertencia sobre las anotaciones sin procesadores y nuestra anotación personalizada es una de 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?

EDIT:

La jerarquía del proyecto es muy simple:

main_project 
|-sub_project1 
|... 
|-sub_projectn 

El plug-in está en el pom.xml del main_project. Simplemente asumen 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

+0

¿Cómo se ve la jerarquía de proyecto como? – Daniel

Respuesta

6

dos cosas a comprobar:

  1. Asegúrese de que el main_project (o el plug-in) depends on the project 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. (Véase la documentation of apt for the details.)

Un mejor enfoque está utilizando el annotation processing features of JDK 6 (en lugar del plugin Maven Apt) ya que no requiere el paquete com.sun y la 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:

Cuestiones relacionadas