繁体   English   中英

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

[英]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_OUTPUTSOURCE_OUTPUT

最简单的解决方法可能是假设/要求特定的项目结构,其中源目录和编译的类位于项目的特定子目录中(例如,大多数IDE的srcbin目录,或用于大多数IDE的src/main/javatarget/classes Maven的)。 如果这样做,则可以通过使用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")

我通过生成源文件从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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM