2017-06-13 2 views
0

Benötigen Sie Hilfe beim Annotationsprozessor? Ich habe einen einfachen Annotationsprozessor erstellt, der @autoservice Annotation verwendet, die überprüft, ob das Feld, das mit Anmerkungen versehen ist, endgültig ist. Aber es zeigt keine Kompilierzeit Fehler. Dies ist meine KonfigurationAnnotationsprozessor @autoservice

Annotation:

@Retention(RetentionPolicy.SOURCE) 
@Target(ElementType.FIELD) 
public @interface Store { 

    int temp() default 0; 
} 

Annotation Prozessor:

@SupportedAnnotationTypes("com.self.Store") 
@AutoService(Processor.class) 
public class Process extends AbstractProcessor { 

    @Override 
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { 

     for (Element element : roundEnv.getElementsAnnotatedWith(Store.class)) { 

      TypeElement typeElement = (TypeElement) element; 

      for (Element element2 : typeElement.getEnclosedElements()) { 

       VariableElement variableElement = (VariableElement) element2; 

       if (!variableElement.getModifiers().contains(Modifier.FINAL)) { 

        processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "it should be final"); 
       } 

      } 

     } 

     return true; 
    } 

} 

pom-Datei:

<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>annotations</groupId> 
    <artifactId>annotations</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>annotation</name> 
    <dependencies> 
<dependency> 
     <groupId>com.google.auto.service</groupId> 
     <artifactId>auto-service</artifactId> 
     <version>1.0-rc2</version> 
     <optional>true</optional> 
    </dependency> 
    </dependencies> 
    <build> 
    <sourceDirectory>src</sourceDirectory> 
    <plugins> 
     <plugin> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.5.1</version> 
     <configuration> 
      <source>1.8</source> 
      <target>1.8</target> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

Testing-Datei:

public class Test { 

    @Store 
    public int id; 
} 

Antwort

0

Es sieht so aus, als ob Ihnen ein Schritt fehlt. Running Maven Build von diesem Projekt wird den Google AutoService Annotationsprozessor aufrufen, einen registration file für Ihren custom processor erstellen und einen .jar damit erstellen. Um für Ihren Prozessor zu arbeiten, dass .jar muss als Abhängigkeit vor Kompilieren des Projekts, das Test enthält einbezogen werden. Andernfalls wird die Registrierungsdatei, die von Java ServiceLoader werden muss abgeholt erzeugt während Kompilierung und offensichtlich nicht in die Compilers Classpath enthalten.

Verwandte Themen