【发布时间】:2015-10-03 00:25:30
【问题描述】:
我有注解@Foo 和对应的FooProcessor。在那里我需要项目根目录的位置,如果我知道如何获取它,我可以从 class/java 文件的位置解析它。
例如。
...
public class FooProcessor extends AbstractProcessor{
...
void processElement(Element e, Foo foo){
File f = getClassFileOrWhatever(e.getEnclosingElement());
File projectRoot = getProjectRoot(f);
doSomething(projectRoot);
}
File getClassFileOrWhatever(Element e){
???
}
...
}
在一个不同的项目中,它有一个包含 Foo 注释的 jar 和它的处理器:
/this/part/might/change/someproject/src/Foobar.java
public class Foobar{
@Foo public void foobar(){}
}
=> 我需要 FooProcessor::getProjectRoot 来返回 "/this/part/might/change/someproject/" 如果我有 "/this/part/might/change/someproject/src/Foobar.java 这显然是微不足道的" 来自 FooProcessor::getClassFileOrWhatever。
当我使用 Eclipse 使用带注释的方法编译类时,似乎 new File(".") 指的是我的主目录。我可以从那里遍历文件树,并希望由 element.getEnclosureElement() 表示的类文件在某个地方。然而,这似乎 a) 非常慢并且 b) 由于不同的编译环境而容易出错。
【问题讨论】:
标签: java eclipse annotations classpath