当前位置: 首页 > 面试题库 >

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

宋嘉禧
2023-03-14
问题内容

我正在为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

最简单的解决方法可能是假定/需要特定的项目结构,其中源目录和编译的类是在项目的特定子目录(如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")


 类似资料:
  • 有人知道如何在Android项目中启用Eclipse中的注释处理吗?我做了以下工作: 使用处理器和META-INF创建Java项目 如果我从文件夹中删除jar文件,Eclipse会报告项目中的错误,因为找不到注释处理器。但是,如果处理器就位并且配置了Eclipse,则不会进行处理 如果我在标准Java项目中使用相同的处理器,它就可以正常工作<有人能帮我吗?谢谢

  • 问题内容: 我有一个名为@Pojo的自定义注释,可用于自动生成Wiki文档: 我这样使用它: 注释资源方法,以便注释处理器可以自动生成描述所需资源和类型的Wiki页面。 我需要在注释处理器中读取该字段的值,但出现运行时错误。 在我的处理器的源代码中,我有以下几行: 但实际的类不适用于处理器。我认为我需要一个替代品来代替实际课程。我不确定该怎么买。 我得到的错误是: 该是我的一个提到的一类注释。 不

  • 问题内容: 我正在编写我的第一个注释处理器,但遇到一些琐碎的问题,但找不到任何有关它的信息。 我有一个带有注释的元素 当我将此属性作为处理器中的元素获取时,我似乎无法以任何方式获取元素的类型。在这种情况下,可能要获取代表String的Class或TypeElement实例。 我尝试使用实例化容器类型的类对象,但它引发了ClassNotFoundException。我认为这是因为我无法访问包含该类的

  • 我正在使用gradle/querydsl和JPA 2.1。 我想使用APT(qenties)生成querydsl元数据。 为此,我使用了gradle apt插件和gradle 4.7 在我的项目中,我使用以下配置了compileJava选项:

  • 我们使用Eclipse注释处理和Velocity代码生成框架。不久前,我们更新了所有代码和构建以使用Java11,但没有注意到代码生成不再有效。(我们暂时不需要更改任何生成的代码。) 在更新了各种jars并重建了Eclipse插件之后,它试图调用我们的代码生成处理器--但是它得到了类的NoClassDefFinder错误。这应该很容易解决,但是带有该类的jar已经在项目类路径和Eclipse注释F

  • 我有一个包含2个模块的maven项目。其中一个模块包含注释处理器。当我尝试将项目作为Android项目的依赖项导入时,它不会运行注释处理器。找不到生成的类文件。 我从jitpack导入如上所示的项目。jitpack上的构建成功了,我也可以在本地访问代码,这意味着编译成功了。但是应该生成的类并没有生成。所以要么是处理器没有启动,要么是我生成的类在错误的位置?android项目确实使用了许多其他带有注