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

时间:2009-10-26 22:20:40

标签: java annotations preprocessor jdk1.6

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

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

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

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

  • 使用javac的{​​{1}}选项将MyProject的当前目录传递给MyProcessor。
    问题:这是一条难看的硬编码路径:-A

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

  • 还有哪些其他选择?

有人可以建议,如何继续?

1 个答案:

答案 0 :(得分:4)

使用Processor.init()作为参数调用

ProcessingEnvironment方法(您已实现),而参数又返回Filer实例的getFiler()方法。

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