小编Jur*_*nju的帖子

如何在Java注释处理器中获取正确的JavaFileManager?

我已经编写了一个Java注释处理器,通过扩展javax.annotation.processing.AbstractProcessor在Eclipse上下文中调用它并且工作正常,除了我需要有关处理器工作的源路径和类路径的更多信息:

@SupportedAnnotationTypes({"MyAnno"})
@SupportedSourceVersion(SourceVersion.RELEASE_8)
public class Processor extends AbstractProcessor {

    @Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
        // this used to work in Java4 but not anymore (since Java6?):
        String sourcePath = processingEnv.getOptions().get("sourcepath");
        String classPath = processingEnv.getOptions().get("classpath");

        for (Element e : roundEnv.getElementsAnnotatedWith(MyAnno.class)) {
            myProcess(e, sourcePath, classPath); 
        }

        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是如何在注释处理上下文(实现process)中检索一个有效的JavaFileManager,它可以给出源路径和当前正在执行注释处理器的编译器的类路径.最好,我会找到一个不涉及对Eclipse/JDT特定接口的依赖的解决方案.

我已经试过这不以下工作:

DiagnosticCollector<JavaFileObject> diagnostics =
                   new DiagnosticCollector<JavaFileObject>();
StandardJavaFileManager fm = ToolProvider.getSystemJavaCompiler().getStandardFileManager(diagnostics, null, null);
fm.getLocation(StandardLocation.CLASS_PATH); // prints an empty class …
Run Code Online (Sandbox Code Playgroud)

java eclipse annotation-processing

8
推荐指数
1
解决办法
862
查看次数

标签 统计

annotation-processing ×1

eclipse ×1

java ×1