我有注释@Foo和相应的FooProcessor。在那里,我需要项目根目录的位置,如果我弄清楚如何获取它,我可以从类/ 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 /”,如果我有来自FooProcessor的“/this/part/might/change/someproject/src/Foobar.java”,这显然是微不足道的:: getClassFileOrWhatever。
当我用Eclipse注释方法编译类时,似乎新文件(“。”)引用了我的主目录。我可以从那里走过文件树,并希望element.getEnclosingElement()表示的类文件在那里。然而,由于编译环境不同,这似乎a)非常缓慢且b)容易出错。
答案 0 :(得分:0)
这就是诀窍:
FooProcessor.class.getProtectionDomain().getCodeSource().getLocation().toString();
这给了我基本上使用的jar文件的路径,我可以用它来计算我的案例中的项目根目录。