我想创建一个使用我自己的自定义注释来隐藏代码应该被触发的api。 我创建了我的注释并创建了处理器。 但现在的问题是,我不知道如何构建它。 让我更好地解释一下: 它是一个控制台应用程序,我必须在调用方法后打印文本。java自定义注释构建和运行命令行
因此,我创建了一个注释@PrintText
并创建了一个PrintTextProcessor。 但是,当我尝试编译它时,它不显示所需的输出。 我注释了一种方法。 但它看起来注释不起作用。 我错过了什么。
以下是我的代码 注释类:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface PrintText{
}
注解处理器类:
@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;
}
}
现在我的主类谈到:
public class Main{
@PrintMe
public void testMethod(){
System.out.println("In test method");
}
public static void main(String s[]){
new Main().testMethod();
}
}
现在,当我尝试编译此程序并运行它,它只打印以下文本: 在测试方法
我用下面的命令
javac Main.java
java Main
我错过了什么? 我已经浏览了互联网上的几篇文章,发现有apt工具。 但我不知道如何通过命令行来构建和运行它。 我正在使用java6。
在此先感谢。
你期望什么输出? – Abdelhak
你在'META-INF/services'中注册过你的处理器吗?我想你必须在那里提供一个名为'javax.annotation.processing.Processor'的文件,列出你的处理器的FQN(s)。 – jah
也许这可以帮助:(https://stackoverflow.com/questions/11685498/what-is-the-default-annotation-processors-discovery-process) – jah