2011-08-06 13 views

Odpowiedz

20

Po przechodząc wiele w istniejącej dokumentacji w internecie, natknąłem się na następujący:

Co należy wyjaśnić:

  • W celu przetwarzanie adnotacji na danym projekcie P, najpierw potrzebujesz procesor adnotacji skompilowany w oddzielnej bibliotece S. P powinien mieć zależność od S.
  • Implementacja przetwarzania adnotacji w Javie 5 to absolutnie nie to samo co w Ja va 6.
  • Java 5 polega na oddzielnym wykonaniu apt. Odpowiednie samouczki pomagają zrozumieć podstawy przetwarzania i implementacji adnotacji w Javie 5. Dobra lektura dla początkujących.
  • Wdrażanie przetwarzania adnotacji w Javie 5 z Mavenem jest trudne. Aby uzyskać dostęp do interfejsu API opisanego w tych samouczkach, należy dodać lokalną zależność do tools.jar. Nieczysty. Niektóre wtyczki firm trzecich wywołujące apt są dostępne, ale nie są dobrze udokumentowane.
  • Użytkownicy korzystający z języka Java 6 powinni nie rozpocząć wdrażanie swoich procesorów zgodnie z powyższymi samouczkami.

tworzenie adnotacji w Javie 6 z Maven

  • Nowy package została dostarczona w Javie 6 przetwarzać adnotacje: the Pluggable Annotation Processing.
  • Aby zaimplementować procesor, utwórz osobny projekt Maven. Powyższy samouczek lub this wyjaśnia sposób postępowania. To jest nasza biblioteka S.
  • Następnie utwórz swój projekt P i dodać zależność Maven na S.
  • Istnieje obecnie jest issue z maven-compiler-plugin, ale obejście jest dostępny here. Użyj go, aby skompilować wygenerowany kod jako część istniejącego kodu z adnotacjami.

... i kod pokolenie

  • Wielki biblioteki generowania kodu Java o nazwie CodeModel jest dostępny z Maven centralny. Dostępny jest dobry samouczek: here. Pakiet przetwarzania adnotacji javax oferuje także kilka narzędzi do generowania wyników.
+2

W tej odpowiedzi jest dużo dobrych rzeczy. Ale jedno nie jest prawdą: możesz to zrobić w jednym przejściu maven. Oto przykład, który obejmuje także procesor adnotacji używający JCodeModel: https://github.com/jjYBdx4IL/example-maven-project-setups/tree/master/compile-time-annotation-processing – user1050755

+0

@ user1050755 Dzięki za wspaniałą propozycję . Jedno pytanie: dlaczego użyłeś tego JCodeModel, a nie oficjalnego? https://github.com/javaee/jaxb-codemodel –

+0

ponieważ jcodemodel naprawia błędy. – user1050755

0

Maven-Antlr-Plugin dokładnie to robi. Generuje klasy Java z gramatyki, a kompilacja wtyczki kompiluje wygenerowane klasy. Może to może być przydatne w maven-annotation-plugin

+1

Dzięki, ale szczerze mówiąc myślę Maven-antlr-plugin jest przesadą. Co więcej, strona nie podaje pełnego przykładu wyjaśniającego, jak rozwiązać problem, który podniosłem. Zastanawiam się nad czymś przy AnnotationProcessor. Wtyczka z adnotacjami maven wygląda interesująco, ale jest w toku z niepełną dokumentacją. Niepomocne. – JVerstry

+0

Nie sądzę, że zalecał ** używanie ** wtyczki antlr bezpośrednio, ale patrząc na jej źródło, aby zobaczyć, jak robi to, co robi. –

3

Maven-procesor-plugin można zrobić ...

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

Przykład z dokumentacją:

<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> 
Powiązane problemy