这样定义的一个注释
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface ParentChain {
public String chainName();
}
想在编译的时候获得chainName的值,并把它写到一个文件中public class FilterAnnotationProcessor implements AnnotationProcessor {
private AnnotationProcessorEnvironment env;
public FilterAnnotationProcessor(AnnotationProcessorEnvironment env){
this.env = env;
}

public void process() {
for(TypeDeclaration type:env.getSpecifiedTypeDeclarations()){
type.getAnnotation(ParentChain.class);
File file = new File("aptLog.txt");
try {
PrintWriter writer = new PrintWriter(file);
writer.write("this is a annotationProcessor");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}}用apt编译了,但信息并没有写进去,请高手帮忙看看该怎么实现!

解决方案 »

  1.   

    恩,代码基本上是参考网上的资料完成的,但apt执行有问题,用ant执行的时候提示
    [apt] 警告: 在搜索路径中找不到指定的 AnnotationProcessorFactory "com.work.filter.annotation.processor.ProcessorFactory"。
    [apt] 警告: 未找到注释处理器,但存在注释。ant的代码为
    <path id="FactoryPath">
    <fileset dir="${src.dir}/com/work/filter/annotation/processor">
    <include name="**/*.java" />
    </fileset>
    <pathelement location="" />
    </path>
    ....
    <apt srcdir="${src.dir}" destdir="${classes.dir}" debug="on"
    compile="true" factory="com.work.filter.annotation.processor.ProcessorFactory"
    factorypathref="FactoryPath"
    >
    <classpath refid="project.classpath" />
    <include name="**/*.java" />
    </apt>
    估计是这个factorypathref写的有问题,这个地方时相对路径还是绝对路径!不太明白
      

  2.   

    问题搞定,apt执行问题。因为带注释的类在AnnotationProcessorFactory的上级目录,编译的时候AnnotationProcessorFactory还没编译,所以会出现找不到AnnotationProcessorFactory的问题。
    只需要在apt之前先把相关的AnnotationProcessorFactory、AnnotationProcessor以及自己定义的注释编译一下再执行apt即可。