【发布时间】:2015-06-21 21:18:13
【问题描述】:
我通过扩展在 Eclipse 上下文中调用的 javax.annotation.processing.AbstractProcessor 编写了一个 Java 注释处理器,它工作正常,除了我需要更多关于我的处理器工作的源路径和类路径的信息:
@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;
}
}
问题是如何在注释处理上下文(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 path
【问题讨论】:
-
也很高兴能理解为什么这不可能了。
-
您找到了从处理器类访问资源的方法吗?
标签: java eclipse annotation-processing