我有一个编译后的步骤,可以操作生成的类的Java字节码。我想让图书馆的使用者过得尽可能轻松,所以我正在寻找使该过程自动进行并且(如果可能的话)与编译器无关的方法。
该注释处理API提供了许多的期望特征(自动服务发现;通过Eclipse的支持)。不幸的是,这是针对代码生成器的,不支持对现有工件的操纵:
该工具的初始输入被认为是在第零轮创建的。因此,尝试创建与这些输入之一相对应的源文件或类文件将导致FilerException。
API推荐的Decorator模式不是一个选择。
我可以看到如何使用运行时代理程序/工具执行该步骤,但这是比手动构建步骤更糟糕的选择,因为它甚至需要外围接触API的任何人以非显而易见的方式配置其JVM。
Groovy编译器是唯一允许进入编译过程的字节码编译器(示例:生成字节码以支持Singleton模式)
注释处理API并非旨在更改代码。如您所知,您所能做的就是安装一个类加载器,在运行时检查字节码并对其进行操作。这是死脑筋,但是行得通。这遵循一般的“我们担心开发人员会尝试一些愚蠢的”主题,您会在整个Java中发现这一主题。没有扩展javac的方法。相关的类是私有的,最终的,或者将随着Java的下一版本而改变。
另一种选择是编写带注释的Java,例如,编写一个类“ ExampleTpl.java”。然后,使用预编译器扩展该文件中的注释,以获取“ Example.java”。在其余的代码中,您使用Example
和忽略ExampleTpl
。
对于Eclipse,有一个错误报告可以自动执行此步骤。我不知道这方面的任何其他工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句