Wie verwenden von benutzerdefinierten annotation-Prozessor mit Maven 2?
In unserer enterprise-Anwendung suchen wir eine dynamische Methode zum erfassen von Daten aus Java-Klassen. Wir erstellt eine benutzerdefinierte annotation-interface (@interface
) mit einem name
Eigenschaft. Wir möchten, sammeln Sie den Wert dieser Eigenschaft von allen annotierten Klassen.
Konnte ich erstellen Sie eine AnnotationProcessorFactory
und ein AnnotationProcessor
für die benutzerdefinierte annotation. Da sind wir mit Maven 2, habe ich noch die folgenden plugins in der pom.xml
von der hauptassembly des Projekts.
<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>
Diese befindet sich in der Haupt-Projekt, das mehrere sub-Projekte. Die Fabrik-und custom-Prozessor sind in einem dieser Teilprojekte. Die individuelle Anmerkungen sind verstreut über alle sub-Projekte, das ist der Grund, warum ich das plugin in der pom.xml
von der hauptassembly des Projekts.
Das problem ist, wenn ich Problem der mvn apt:process
Befehl bekam ich eine Warnung über die Anmerkungen ohne Prozessoren und unsere benutzerdefinierten annotation ist unter Ihnen. Ich nehme an, dies bedeutet, dass das plugin nicht finden kann die factory-Klasse.
Was soll ich tun, damit das plugin finden konnte, die Fabrik und die Prozessor-Datei?
EDIT:
Die Projekt-Hierarchie ist sehr einfach:
main_project
|-sub_project1
|...
|-sub_projectn
Das plugin ist in der pom.xml
des main_project
. Einfach davon ausgehen, dass die Fabrik und der Prozessor in sub_project1
und die individuelle Anmerkungen sind in sub_project2
, sub_project3
, ..., sub_projectn
- Was macht Ihr Projekt-Hierarchie Aussehen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zwei Dinge zu überprüfen:
main_project
(oder das plugin) hängt von dem Projekt ab mitComponentAnnotationProcessFactory
.<factory>
Konfiguration-tag der Apt-Maven-Plugin hat bei mir nicht funktioniert, aber das plugin findet die factory-Klasse, wenn Ihr vollständig Qualifizierter name ist in derMETA-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
- Datei. (Siehe die Dokumentation von apt für die details.)Ein besserer Ansatz ist die Verwendung der annotation processing features von JDK 6 (statt Maven Apt-Plugin) da es nicht erforderlich, die
com.sun
Paket und dietools.jar
von derlib
Ordner des JDK.Weitere Referenzen: