java custom annotation building and running command line

1.6k Views Asked by At

I want to create an api using my own custom annotation that the hidden code should be triggered. I have created my annotation and have created the processor as well. But now the problem is, I don't know how to build it. Let me explain in better way: Its a console applicatioyn, I have to print a text once a method is called.

So, I have created an annotation @PrintText and also created a PrintTextProcessor. But when I try to compile it, it doesn't show the required output. I am annotating a method. But it looks annotation doesn't work. Am I missing anything.

Following is my code Annotation Class:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface PrintText{

}

Annotation Processor Class:

@SupportedAnnotationTypes("com.example.PrintText")
public class PrintTextProcessor extends AbstractProcessor {

   @Override
   public boolean process(Set<? extends TypeElement> annotations, 
                       RoundEnvironment roundEnv) {
     Set<? extends Element> elements = roundEnv.getElementsAnnotatedWith(PrintText.class);
     for(Element e : elements){
        if(!e.getClass().equals(ParticularType.class)){
            processingEnv.getMessager().printMessage(Kind.ERROR,
                 "@PrintText annotated fields must be of type ParticularType");
        }
     }
     return true;
   }

}

Now my main class comes:

public class Main{

   @PrintMe
   public void testMethod(){
      System.out.println("In test method");
   }

   public static void main(String s[]){
      new Main().testMethod();
   }
}

Now when I try to compile this program and run it, it only prints the following text: In test method

I used following commands

javac Main.java

java Main

Did I miss something? I have been gone through several posts on the internet and found that there is apt tool. But I don't know how to build and run it via command line. I am using java6.

Thanks in advance.

1

There are 1 best solutions below

4
Denys Skalenko On

Here is very good example https://github.com/provegard/aptdemo but basically you have to create package META-INF/services and put javax.annotation.processing.Processor file with classpath to your processor (in other words register your processor), then build your app let's say with mvn to get jar file (mvn package, see example) and then compile with javac (javac -cp /path/to/aptdemo-1.0-SNAPSHOT.jar SomeTestClass.java)