【问题标题】:Get file path of working directory获取工作目录的文件路径
【发布时间】:2014-10-03 13:48:53
【问题描述】:

我正在为 android 项目编写注释处理器。我想获取 androids 资源文件夹的绝对路径(我知道它可以通过 gradle 进行配置,但我暂时忽略了这种情况)。

我的想法是获取已处理元素的绝对路径:

@MyAnnotation public class Foo{ ... }

所以在我的 AnnotationProcessor 中,我想获取到 Foo.java 的路径。

  @Override public boolean process(Set<? extends TypeElement> annotations,
      RoundEnvironment roundEnv) {

    for (Element element : roundEnv.getElementsAnnotatedWith(MyAnnotation.class))

      try {
        ProcessorMessage.info(element, "Path: %s %s", getWorkingDir(), getExecutionPath());
      } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
        ProcessorMessage.error(element, "Error " + e.getMessage());
      }

    return false;
  }

  private String getExecutionPath() throws UnsupportedEncodingException {
    String path = AnnotatedAdapterProcessor.class.getProtectionDomain()
        .getCodeSource()
        .getLocation()
        .getPath();
    String decodedPath = URLDecoder.decode(path, "UTF-8");

    return decodedPath;
  }

  private String getWorkingDir() {
    Path currentRelativePath = Paths.get("");
    String s = currentRelativePath.toAbsolutePath().toString();
    return s;
  }

但是它给了我以下输出:

路径:/Users/XXXXX/.gradle/daemon/1.12 /Users/XXXXX/.m2/repository/com/example/myprocessor/processor/0.1.2-SNAPSHOT/processor-0.1.2-SNAPSHOT.jar

有没有办法获取Foo.java所在的路径? (只是为了获得一个起点,我将继续开始搜索资源文件夹)

【问题讨论】:

    标签: java android annotation-processing


    【解决方案1】:

    我认为这些路径可能取决于您的构建环境,如果您手动构建它们,它们可能无法在每台机器或每个 IDE 上运行。
    这个问题可能会有所帮助:Annotation processor, get project path

    如果这不起作用,我认为您仍然在正确的轨道上,但应该尝试使用实际资源而不是处理器加载的类,如下所示:

    String path = Foo.class.getProtectionDomain().getCodeSource().getLocation().getPath();
    

    我不确定这是否也适用于处理器的上下文,但通常这应该为您提供类文件的根输出目录:

    String path = Foo.class.getClassLoader().getResource(".").getFile();
    

    例如,如果您知道输出目录位于 your_project/target/classes 中,则可以使用该 get 访问源目录或资源目录。

    【讨论】:

    • .getClassLoader().getResource(".").getFile() 版本在 Netbeans 中为我做了诀窍,在保存时进行编译。没有其他方法奏效
    猜你喜欢
    • 2014-06-21
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 2015-12-07
    • 2023-04-05
    • 2016-10-17
    • 2012-04-12
    相关资源
    最近更新 更多