2016-01-10 42 views
0

我想创建一个使用我自己的自定义注释来隐藏代码应该被触发的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。

在此先感谢。

+0

你期望什么输出? – Abdelhak

+0

你在'META-INF/services'中注册过你的处理器吗?我想你必须在那里提供一个名为'javax.annotation.processing.Processor'的文件,列出你的处理器的FQN(s)。 – jah

+0

也许这可以帮助:(https://stackoverflow.com/questions/11685498/what-is-the-default-annotation-processors-discovery-process) – jah

回答

1

这里是很好的例子https://github.com/provegard/aptdemo 但基本上你要创建的软件包META-INF /服务 并把javax.annotation.processing.Processor类路径的文件到你的处理器(即注册您的处理器),然后建立你的应用程序让我们说与mvn获取jar文件(mvn包,请参阅示例),然后用javac编译(javac -cp /path/to/aptdemo-1.0-SNAPSHOT.jar SomeTestClass.java)

+0

我不能使用像maven,蚂蚁等任何构建工具。有任何方法可以使用javac和java命令使其运行。 – NewBee

+0

我的意思是说,如果你可以提供直接的javac和java命令让它运行,它会非常友好。我试图使用java命令来创建一个jar文件,但那不起作用。 – NewBee

+0

即使没有mvn,也可以创建jar文件并执行相同的操作: 1)jar cfv jarName.jar -C src/main/java /。 2)javac -cp jarName.jar -processor com.programmaticallyspeaking.aptdemo.AnnotationProcessor src/main/java/com/programmaticallyspeaking/aptdemo/Test.java 在这种情况下你甚至不需要javax.annotation.processing。处理器(不注册你的proccessor) P.S:t我用我提供的例子执行的真正的命令 –