小编典典

Eclipse-注释处理器,获取项目路径

java

我正在为Eclipse构建注释处理器插件,我想做的是在处理过程中检查项目文件夹中的几个文件。

我想知道如何从处理器中获取项目路径。我相信可以这样做,因为项目源路径已提供给处理器-但我找不到找到它的方法。

我尝试查看System.properties和processingEnv.getOptions(),但那里没有有用的信息。

最终,我也想在Netbeans上使用此注释处理器,因此,如果有一个公共API可以提供此信息,那将是最好的-但会有所帮助。


阅读 218

收藏
2020-11-01

共1个答案

小编典典

处理环境为您提供了一个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_OUTPUTSOURCE_OUTPUT

最简单的解决方法可能是假定/需要特定的项目结构,其中源目录和编译的类是在项目的特定子目录(如srcbin目录中大多数IDE或src/main/javatarget/classesMaven的)。如果这样做,则可以通过FilerSOURCE_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")
2020-11-01