如何确定注释处理器中带注释元素的类路径?

时间:2015-10-02 15:46:56

标签: java eclipse annotations classpath

我有注释@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)容易出错。

1 个答案:

答案 0 :(得分:0)

这就是诀窍:

 FooProcessor.class.getProtectionDomain().getCodeSource().getLocation().toString();

这给了我基本上使用的jar文件的路径,我可以用它来计算我的案例中的项目根目录。