【发布时间】: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