6

In unserer Unternehmensanwendung suchen wir nach einer dynamischen Möglichkeit, Daten aus unseren Java-Klassen zu sammeln. Wir haben eine benutzerdefinierte Annotationsschnittstelle (@interface) mit einer name-Eigenschaft erstellt. Wir möchten den Wert dieser Eigenschaft von allen annotierten Klassen sammeln.Wie verwende ich einen benutzerdefinierten Annotationsprozessor mit Maven 2?

Ich schaffte es, eine AnnotationProcessorFactory und eine AnnotationProcessor für die benutzerdefinierte Annotation zu erstellen. Da wir Maven 2 verwenden, habe ich die Plugins in der pom.xml des Hauptprojekts hinzugefügt.

<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> 

Dies liegt im Hauptprojekt, das mehrere Unterprojekte hat. Die Fabrik und der benutzerdefinierte Prozessor befinden sich in einem dieser Unterprojekte. Die benutzerdefinierten Anmerkungen sind durch alle Unterprojekte verstreut, deshalb habe ich das Plugin in die pom.xml des Hauptprojekts gestellt.

Das Problem ist, wenn ich den mvn apt:process Befehl ausstelle, habe ich eine Warnung über die Anmerkungen ohne Prozessoren erhalten, und unsere kundenspezifische Anmerkung gehört zu ihnen. Ich nehme an, das bedeutet, dass das Plugin die Factory-Klasse nicht finden kann.

Was soll ich tun, damit das Plugin die Fabrik und die Prozessordatei finden kann?

EDIT:

Die Hierarchie Projekt ist sehr einfach:

main_project 
|-sub_project1 
|... 
|-sub_projectn 

Das Plugin ist in den pom.xml der main_project. Einfach mal davon aus, dass die Fabrik und Prozessor sind in sub_project1 und die benutzerdefinierten Beschriftungen sind in sub_project2, sub_project3, ..., sub_projectn

+0

Wie sieht Ihre Hierarchie Projekt aussehen? – Daniel

Antwort

6

Zwei Dinge zu überprüfen:

  1. Stellen Sie sicher, dass die main_project (oder das Plugin) depends on the project enthält Ihre ComponentAnnotationProcessFactory.
  2. Das <factory> Konfigurationstag des Apt Maven Plugins funktionierte nicht für mich, aber das Plugin findet die Fabrikklasse, wenn sein voll qualifizierter Name in der META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory Datei ist. (Siehe documentation of apt for the details.)

Ein besserer Ansatz wird mit dem annotation processing features of JDK 6 (anstelle der Maven Apt Plugin), da es nicht das com.sun Paket benötigt und die tools.jar aus dem lib Ordner des 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> 

Weitere Referenzen:

Verwandte Themen