2016-08-12 5 views
3

Ich bin neu in Annotation Verarbeitung und ich versuche, es mit Maven zu automatisieren. Ich habe dies in meinem pom.xml setzen:Maven Annotation Processing Processor nicht gefunden

<plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.0</version> 
      <configuration> 
       <annotationProcessors> 
        <annotationProcessor> 
         co.aurasphere.revolver.annotation.processor.InjectAnnotationProcessor</annotationProcessor> 
        <annotationProcessor> 
         co.aurasphere.revolver.annotation.processor.RevolverContextAnnotationProcessor</annotationProcessor> 
       </annotationProcessors> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
    </plugins> 

Das Problem ist, dass, wenn ich versuche, das Projekt, das ich ein CompilationFailureException bekommen zu bauen, weil Maven können die Prozessoren finden.

Ich habe andere Fragen wie diese gefunden, gelöst, indem Sie die Abhängigkeit außerhalb des Plugins setzen. Ich habe es versucht, aber nichts hat sich für mich geändert.

Fehle ich etwas?

Vielen Dank.

EDIT

Hier ist meine Abhängigkeit von einem anderen Projekt, das sowohl den Prozessor und die Anmerkungen enthält:

<dependencies> 
    <dependency> 
     <groupId>co.aurasphere</groupId> 
     <artifactId>revolver-annotation-processor</artifactId> 
     <version>0.0.3-SNAPSHOT</version> 
    </dependency> 
</dependencies> 

EDIT 2:

Nach einer weiteren Untersuchung habe ich beschlossen, dekompiliere den Prozessor JAR (mit Maven gebaut) und es passiert, dass ... meine Klassen nicht da sind. Aus irgendwelchen Gründen kompiliert Maven meine Klassen nicht in die JAR und deshalb werden die Klassen nicht gefunden. Ich habe versucht, herauszufinden, was an diesem Build falsch ist (das ist mir noch nie passiert und ich habe Maven eine Weile benutzt ...).

Zunächst einmal ist die Verpackung auf diesem Projekt Glas. Die Klassen befinden sich alle unter src/main/java. Ich habe in meiner pom.xml eingecheckt, dass der Klassenpfad und der Quellpfad identisch sind.

Hier ist der Prozessor pom:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>co.aurasphere</groupId> 
<artifactId>revolver-annotation-processor</artifactId> 
<version>0.0.3-SNAPSHOT</version> 
<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.1</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<dependencies> 
    <!-- https://mvnrepository.com/artifact/javax.inject/javax.inject --> 
    <dependency> 
     <groupId>javax.inject</groupId> 
     <artifactId>javax.inject</artifactId> 
     <version>1</version> 
    </dependency> 

    <!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity --> 
    <dependency> 
     <groupId>org.apache.velocity</groupId> 
     <artifactId>velocity</artifactId> 
     <version>1.7</version> 
    </dependency> 


</dependencies> 

EDIT 3

Here ist der Ausgang eines Maven sauber auf dem Prozessor-Projekt installieren. Leider ist die Ausgabe zu lang und ich musste eine externe Verbindung veröffentlichen, auch wenn ich weiß, dass es nicht gut ist.

EDIT 4

Hier sind einige Screenshots meiner Abhängigkeitshierarchie: Eclipse und File System.

Da das Projekt ursprünglich als einfaches Eclipse-Java-Projekt erstellt und dann in ein Maven-Projekt umgewandelt wurde, versuchte ich ein neues Maven-Projekt zu erstellen und alles auf das neue zu verschieben, in der Hoffnung, dass das Problem das Eclipse-Plugin war etwas kaputt gemacht, aber der Fehler war immer noch da.

+3

Bitte schreiben Sie, wie Sie die Abhängigkeiten zu den 'co.auraspere.revolver ...' Paketen definiert haben. Sie sind nicht ** in ** dem Projekt, das Sie zu kompilieren versuchen, oder? – ppeterka

+2

Beachten Sie, dass Sie die Annotationsprozessoren erstellen müssen, * bevor * Sie das Projekt erstellen, das sie verwendet. – chrylis

+0

Die Anmerkungen und die Prozessoren werden auf einem anderen Projekt wie im OP importiert (ich habe es bearbeitet). Ich habe diesen Prozess vorher gebaut und ich sehe den Import unter Maven Dependencies in Eclipse als Projekt (kein Jar, IDK warum ...). Das Prozessor-Projekt ist definiert mit jar Aurasphere

Antwort

3

Ich habe die Antwort selbst gefunden. Ich habe herausgefunden, dass das Problem die Datei javax.annotation.processing.Processor in META-INF/services/mit der Konfiguration der Klasse des Annotationsprozessors war. Um das Problem zu beheben hatte ich folgendes in die pom.xml Konfiguration meines Prozessor Projekt hinzuzufügen:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.5.1</version> 
      <configuration> 
       <compilerArgument> 
        -proc:none 
       </compilerArgument> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

Diese lassen Maven die Klassen in das eigentliche Glas bauen und das Problem behoben. Ich weiß nicht, ob das ein Käfer ist oder nicht, aber es sieht mir sicher komisch aus. Danke euch allen für die Hilfe!

1

Der einfachste Weg besteht darin, den Annotationsprozessor im Verzeichnis META-INF/services des Revolver-Annotation-Prozessor-Artefakts zu registrieren. No Maven-Compiler-Konfiguration ist erforderlich.

Überprüfen Sie, ob es bereits registriert ist, wenn nicht, registrieren Sie es selbst, wenn Sie den Quellcode kontrollieren.

https://docs.oracle.com/javase/8/docs/api/java/util/ServiceLoader.html

Wenn Sie den Quellcode steuern empfehle ich auch als die Anmerkungen der Prozessor in der gleichen Artefakt zu verpacken. So wird der Annotationsprozessor bei jeder Annotation auch vom Compiler übernommen.

+0

Eigentlich weiß ich bereits, dass du das kannst, aber da ich Maven für das Projekt verwende und ich nicht wirklich mit Javac oder Eclipse baue, möchte ich das mit dem Maven Build – Aurasphere

+1

Ähm integrieren, das Maven Compiler Plugin benutzt javac ... Die Art und Weise, wie ich es beschrieben habe, wird von Maven sofort ohne zusätzliche Konfiguration unterstützt, da der Prozessor automatisch abgeholt wird. – Puce

Verwandte Themen