【问题标题】:How to determine the classpath of an annotated element in an annotation processor?如何确定注释处理器中注释元素的类路径?
【发布时间】: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


    【解决方案1】:

    这成功了:

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

    这基本上给了我使用的 jar 文件的路径,我可以用它来找出我的项目根目录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      • 2014-04-25
      • 1970-01-01
      相关资源
      最近更新 更多