插入Java编译器

插入Java编译器,java,compiler-construction,annotations,instrumentation,Java,Compiler Construction,Annotations,Instrumentation,我有一个编译后步骤,可以处理生成类的Java字节码。我想让图书馆消费者的生活尽可能地无痛,所以我正在寻找使这个过程自动化和(如果可能的话)编译器不可知的方法 提供了许多所需的特性(自动服务发现;由Eclipse支持)。不幸的是,这是针对代码生成器和: 该工具的初始输入为 被认为是由第0位创建的 圆形的因此,尝试创建 对应的源文件或类文件 这些输入中的一个将导致 文件异常 API推荐的装饰器模式不是一个选项 我可以看到如何使用运行时代理/插装来执行该步骤,但这是比手动构建步骤更糟糕的选项,因为它需

我有一个编译后步骤,可以处理生成类的Java字节码。我想让图书馆消费者的生活尽可能地无痛,所以我正在寻找使这个过程自动化和(如果可能的话)编译器不可知的方法

提供了许多所需的特性(自动服务发现;由Eclipse支持)。不幸的是,这是针对代码生成器和:

该工具的初始输入为 被认为是由第0位创建的 圆形的因此,尝试创建 对应的源文件或类文件 这些输入中的一个将导致 文件异常

API推荐的装饰器模式不是一个选项

我可以看到如何使用运行时代理/插装来执行该步骤,但这是比手动构建步骤更糟糕的选项,因为它需要任何人(即使是被API接触过的外围设备)以不明显的方式配置JVM


是否有一种方法可以插入或包装由调用的?有没有人成功地颠覆了注释处理器来操作字节码,不管文档怎么说?

Groovy编译器是唯一一个允许挂接到编译过程中的字节码编译器(示例:)

注释处理API并不意味着要更改代码。正如您已经发现的,您所能做的就是安装一个类加载器,在运行时检查字节码并对其进行操作。这是脑死,但它的工作。这遵循了“我们担心开发人员可能会尝试一些愚蠢的事情”这一主题,您可以在Java中找到这一主题。没有办法扩展javac。相关的类要么是private类,要么是final类,要么将随下一版本的Java而改变

另一种选择是编写带注释的Java,例如编写一个类“ExampleTpl.Java”。然后,使用预编译器扩展该文件中的注释以获得“Example.java”。在代码的其余部分中,使用
Example
并忽略
ExampleTpl

对于Eclipse,有一个。我不知道这方面还有其他工作。

可以完成


请看我的博客文章,其中使用注释处理器重写代码。限制是它只能与Sun的javac一起使用。

您的链接已失效。