我有一个自己的注释处理器 (我们称之为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可以引用这个编译的类并从中检索数据。
问题:对于这么简单的(?)任务来说太复杂了。
还有哪些其他选择?
有人可以建议,如何继续?
答案 0 :(得分:4)
Processor.init()
作为参数调用 ProcessingEnvironment方法(您已实现),而参数又返回Filer实例的getFiler()
方法。
您应该使用createResource()
的{{1}}方法(假设生成的输出既不是类也不是源;否则使用适当的Filer
方法)并将输出写入class或source位置(前者可能更可取,但这取决于您正在做什么)。如果需要,两者都可以通过命令行开关覆盖,但是定义良好,因为它们将在构建过程中使用。