java - 基于已编译的 Class 文件的 Java 代码生成
问题描述
我正在尝试为包含一些附加功能的 POJO 类生成一个包装器。
因此,就我而言,我需要能够基于已编译的类(PojoWrapper.java for Pojo.class)生成新的 java 源代码文件。
但我必须完全使用类文件。有两个原因:
我需要类的最终形状,但注释处理器可以改变它。例如,Lombok 可能会向类添加方法,但对我来说,提前了解这些方法很重要。
我必须能够为我不拥有的类(第三方库)生成源代码。
显然,注释处理对我不起作用。
我想到的第一个想法是制作一个 maven 插件,它将通过 ASM 库分析生成的二进制类。之后我将生成源代码。
但这里有一个棘手的部分:要获得最终的 JAR,我需要编译我的项目两次,第一次生成包装源代码,然后我需要将所有文件编译在一起以构建最终的二进制文件。
在这里,我正在考虑在编译阶段之前单独调用 maven-compile-plugin,它将编译我需要的类的子集,之后我将执行代码生成,然后在编译阶段整个项目将是编译。
我的问题是:如何正确实施以下步骤:
- 编译一组将作为代码生成基础的类
- 分析二进制文件并生成 java 源代码
解决方案
您可以使用 Java Compiler Plugin API(即拦截javac
编译阶段)。
看
https://docs.oracle.com/javase/8/docs/jdk/api/javac/tree/com/sun/source/util/Plugin.html
推荐阅读
- html - 让 MatDatePicker 显示为格式 01/01/2010
- javascript - 如何禁用弹出窗口阻止程序?
- firebase - 使用 Firebase Cloud Functions 为 Live App React Naive 定价的 Stripe Payment
- java - 如何在recyclerview中添加多个过滤器?
- python - Scrapy中的报纸文章刮刀
- axios - 如何在 Axios 中使用“preconnect”和“dns-prefetch”
- c++ - 多层铸造 - C++
- c++ - 是什么导致我的方法中的堆损坏?
- python - 无法使用 pandas python 从单元格中读取货币符号
- laravel - Laravel 多态属于ToThrough