基于已编译的类文件的Java代码生成

时间:2019-05-13 00:17:18

标签: java maven compilation bytecode java-bytecode-asm

我正在尝试为POJO类生成一个包装器,该包装器将包含一些其他功能。

因此,就我而言,我需要一种能够基于编译的类(对于Pojo.class为PojoWrapper.java)生成新的Java源代码文件的功能。

但是我必须完全使用类文件。这样做有两个原因:

  1. 我需要类的最终形状,但是注释处理器可以更改它。例如,龙目岛(Lombok)可以在类中添加方法,但是对我而言,提前了解这些方法很重要。

  2. 我必须能够为我不拥有的类(第三方库)生成源代码。

很显然,注释处理对我而言不起作用。

我想到的第一个想法是制作一个Maven插件,该插件将通过ASM库分析生成的二进制类。然后,我将生成源代码。

但是这里有一个棘手的部分:要获得最终的JAR,我需要两次编译我的项目,第一次是生成包装器源代码,然后需要将所有文件编译在一起以构建最终的二进制文件。 / p>

在这里,我正在考虑在编译阶段之前对maven-compile-plugin的单独调用,该调用将编译所需的类的子集,然后执行代码生成,然后在整个编译阶段进行整个操作项目将被编译。

我的问题是:如何正确执行以下步骤:

  1. 编译一组将作为代码生成基础的类
  2. 分析二进制文件并生成Java源代码