Java:如何在注释处理器和另一个项目之间进行通信?

标签 java annotations preprocessor java-6

我有一个自己的注释处理器 (我们称之为 MyProcessor) 和一个项目(我们称之为 MyProject)-processor 传递给 javac

现在我需要 MyProcessor 来生成一些输出并使其可用于 MyProject。

我有以下选择(和问题):

  • 让 MyProcessor 将文件写入由属性 user.dir 指定的路径。
    问题:从 MyProcessor 的角度来看,user.dir 始终是我的主目录,而不是 MyProject 的路径。

  • 使用 javac-A 选项将 MyProject 的当前目录传递给 MyProcessor。
    问题:这是一个丑陋的硬编码路径:/some/path/to/MyProject/

  • 让 MyProcessor 生成一些源文件,然后由 javac 与 MyProject 一起编译,以便 MyProject 可以引用这个编译类并从中检索数据。
    问题:对于如此简单(?)的任务来说太复杂了。

  • 还有哪些其他选择?

有人可以建议,如何进行吗?

最佳答案

Processor.init()使用 ProcessingEnvironment 调用方法(您已实现)作为参数,反过来,它有一个返回 FilergetFiler() 方法实例。

您应该使用 FilercreateResource() 方法(假设生成的输出既不是类也不是源;否则使用适当的 create 方法)并将输出写入 classsource位置(前者可能更可取,但这取决于你在做什么)。如果需要,两者都可以通过命令行开关覆盖,但定义明确,因为它们将在构建过程中使用。

关于Java:如何在注释处理器和另一个项目之间进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1627669/

相关文章:

c++ - 为什么简单的C++源文件的预处理文件包含数千行代码?

java - JAX-RS 多态 POST 请求 : how should I write my JSON?

java - AsyncTask,多种不同的操作

java - 如何运行定时器?

java - 通过注释向 Java Bean 添加验证

java - @Inherited注解没有被继承

IOS 11 - 当另一个 pin 落后时,MKMapView pin 对话框不可点击

java - 在非 GUI 模式下运行 Jmeter 测试计划

c++ - 使用clang预处理程序将C++源文件连接为一个

visual-studio-2008 - 如何在vs08中设置_win32_wce的预处理器定义