[英]Eclipse - Annotation processor, get project path
我正在为Eclipse构建注释处理器插件,我想做的是在处理过程中检查项目文件夹中的多个文件。
我想知道如何从处理器中获取项目路径。 我相信可以这样做,因为项目源路径已提供给处理器-但我找不到找到它的方法。
我尝试查看System.properties和processingEnv.getOptions(),但那里没有有用的信息。
最终,我也想在Netbeans上使用此注释处理器,因此,如果有一个公共API可以提供此信息,那将是最好的-但会有所帮助。
处理环境为您提供了一个Filer
,可用于加载(已知)资源。 如果您需要绝对路径来发现文件或目录,则可以使用JavaFileManager和StandardLocation
:
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fm = compiler.getStandardFileManager(null, null, null);
Iterable<? extends File> locations = fm.getLocation(StandardLocation.SOURCE_PATH);
如果您使用的是Eclipse,则需要对其进行配置,以将JDK用作运行时,如注释中指出的bennyl所示。
似乎没有强制返回源位置的API,因此上述解决方案将无法可靠地工作,并且只能在某些环境下工作。 例如,仅需要Filer支持CLASS_OUTPUT
和SOURCE_OUTPUT
。
最简单的解决方法可能是假设/要求特定的项目结构,其中源目录和编译的类位于项目的特定子目录中(例如,大多数IDE的src
和bin
目录,或用于大多数IDE的src/main/java
和target/classes
Maven的)。 如果这样做,则可以通过使用Filer
在SOURCE_OUTPUT
位置创建一个临时资源来获取源路径,并从该文件的位置获取相对路径。
Filer filer = processingEnv.getFiler();
FileObject resource = filer.createResource(StandardLocation.CLASS_OUTPUT, "", "tmp", (Element[]) null);
Path projectPath = Paths.get(resource.toUri()).getParent().getParent();
resource.delete();
Path sourcePath = projectPath.resolve("src")
我通过生成源文件从ProsessingEnv
获取源路径:
String fetchSourcePath() {
try {
JavaFileObject generationForPath = processingEnv.getFiler().createSourceFile("PathFor" + getClass().getSimpleName());
Writer writer = generationForPath.openWriter();
String sourcePath = generationForPath.toUri().getPath();
writer.close();
generationForPath.delete();
return sourcePath;
} catch (IOException e) {
processingEnv.getMessager().printMessage(Diagnostic.Kind.WARNING, "Unable to determine source file path!");
}
return "";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.