1

我有一个自己的注释处理器 (我们称之为 MyProcessor)和一个项目(我们称之为 MyProject),它通过传递-processorjavac.

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

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

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

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

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

  • 还有哪些其他选择?

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

4

1 回答 1

4

Processor.init()方法(您已实现)以ProcessingEnvironment作为参数调用,而该参数又具有getFiler()返回Filer实例的方法。

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

于 2009-10-26T22:38:14.363 回答