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

标签 java maven compilation bytecode java-bytecode-asm

我正在尝试为 POJO 类生成一个包装器,其中包含一些附加功能。

因此,对于我的情况,我需要能够根据已编译的类生成新的 java 源代码文件(PojoWrapper.java for Pojo.class)。

但我必须完全使用类文件。原因有二:

  1. 我需要类的最终形状,但注释处理器可以更改它。例如,Lombok 可能会向类添加方法,但对我来说,提前了解这些方法很重要。

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

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

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

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

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

我的问题是:如何正确实现以下步骤:

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

最佳答案

关于基于编译的Class文件生成Java代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56104502/

相关文章:

eclipse - 添加powermock时Maven缺少 Artifact

maven - 从父pom继承属性

java - Maven 是如何知道将源文件放在 exploded 目录下的什么位置?

使用外部库创建独立项目

android - 构建错误,在构建gradle中混合版本

Java 正则表达式可变分组

java - 如何在Javafx的HBox中设置自己的调整大小优先级

java - 检查两个正则表达式是否匹配 java 中的相同字符串

java - 在java中轻松地在函数的开头和结尾插入日志记录

.net - 在两个位置编译类