2011-08-06 7 views

Respuesta

20

Después de navegar mucho en la documentación existente en la red, se me ocurrió lo siguiente:

Lo que hay que aclarar:

  • Con el fin de procesar anotaciones en un proyecto determinado P, primero necesita un procesador de anotaciones compilado en una biblioteca separada S. P debería tener una dependencia en S.
  • Implementar el proceso de anotación en Java 5 no es lo mismo que en Ja va 6.
  • Java 5 se basa en una ejecución separada de apt. Los tutoriales correspondientes here y here ayudan a comprender los principios básicos del procesamiento e implementación de anotaciones en Java 5. Buena lectura para principiantes.
  • Implementar el proceso de anotación en Java 5 con Maven es complicado. Es necesario agregar una dependencia local al tools.jar para acceder a la API que se describe en estos tutoriales. No está limpio. Algunos complementos de terceros que llaman al apt están disponibles, pero no están bien documentados.
  • Aquellos que usan Java 6 deben no jump-start la implementación de sus procesadores de acuerdo con los tutoriales anteriores.

Procesamiento de anotación en Java 6 con Maven

  • Un nuevo package ha sido entregada en Java 6 para procesar anotaciones: la Pluggable Annotation Processing.
  • Para implementar un procesador, cree un proyecto Maven por separado. El tutorial anterior o this uno explica cómo proceder. Esta es nuestra biblioteca S.
  • A continuación, cree su proyecto P y agregar una dependencia Maven sobre S.
  • Existe actualmente un problema con el issuemaven-compiler-plugin, sino una solución disponible here. Úselo para compilar el código generado como parte del código anotado existente.

... y generación de código

  • Una gran biblioteca de generación de código Java llamada CodeModel está disponible de Maven central. Un buen tutorial está disponible here. El paquete de procesamiento de anotación javax ofrece algunas herramientas para generar resultados también.
+2

Hay muchas cosas buenas en esta respuesta. Pero una cosa NO es cierta: puedes hacerlo en un solo pase. Aquí hay un ejemplo que también incluye un procesador de anotaciones usando JCodeModel: https://github.com/jjYBdx4IL/example-maven-project-setups/tree/master/compile-time-annotation-processing – user1050755

+0

@ user1050755 Gracias por una gran sugerencia . Una pregunta: ¿por qué usaste ese JCodeModel y no el oficial? https://github.com/javaee/jaxb-codemodel –

+0

porque jcodemodel realmente soluciona los errores. – user1050755

0

El Maven-Antlr-Plugin hace exactamente esto. Genera clases de Java a partir de una gramática y el plugin de compilación compila las clases generadas. Que podría ser útil la maven-annotation-plugin

+1

Gracias, pero sinceramente creo experto-antlr-plugin es una exageración. Además, el sitio no proporciona un ejemplo completo que explique cómo resolver el problema que planteo. Estoy pensando más en algo a lo largo de AnnotationProcessor. El complemento maven-annotation parece interesante, pero es un trabajo en progreso con documentación incompleta. No es útil. – JVerstry

+0

No creo que defendiera ** usar ** el plugin antlr directamente, pero mirando su fuente para ver cómo hace lo que hace. –

3

experto-procesador-plugin puede hacer eso ...

https://code.google.com/p/maven-annotation-plugin/

Ejemplo de documentación:

<build> <plugins> 
    <!-- Run annotation processors on src/main/java sources --> 
    <plugin> 
    <groupId>org.bsc.maven</groupId> 
    <artifactId>maven-processor-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>process</id> 
     <goals> 
      <goal>process</goal> 
     </goals> 
     <phase>generate-sources</phase> 
     </execution> 
    </executions> 
    </plugin> 
    <!-- Disable annotation processors during normal compilation --> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <configuration> 
     <compilerArgument>-proc:none</compilerArgument> 
    </configuration> 
    </plugin> 
</plugins> </build> 
Cuestiones relacionadas