我正在为Eclipse构建注释处理器插件,我想做的是在处理过程中检查项目文件夹中的几个文件。
我想知道如何从处理器中获取项目路径。我相信可以这样做,因为项目源路径已提供给处理器-但我找不到找到它的方法。
我尝试查看System.properties和processingEnv.getOptions(),但那里没有有用的信息。
最终,我也想在Netbeans上使用此注释处理器,因此,如果有一个公共API可以提供此信息,那将是最好的-但会有所帮助。
处理环境为您提供了一个Filer可用于加载(已知)资源的资源。如果您需要绝对路径来发现文件或目录,则可以使用JavaFileManager和一个StandardLocation:
Filer
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。
CLASS_OUTPUT
SOURCE_OUTPUT
最简单的解决方法可能是假定/需要特定的项目结构,其中源目录和编译的类是在项目的特定子目录(如src和bin目录中大多数IDE或src/main/java和target/classesMaven的)。如果这样做,则可以通过Filer在SOURCE_OUTPUT位置创建一个临时资源来获取源路径,并从该文件的位置获取相对路径。
src
bin
src/main/java
target/classes
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")