ByteBuddy Gradle插件1.11.18指定plugin class报错如何解决?
ByteBuddy 1.11.18版本自定义插件配置方案
两个报错的核心逻辑如下:
- 第一个类转换异常是因为新版本不再支持字符串格式的插件配置,必须传入Class对象
- 第二个
unknown property 'com'报错是因为Gradle构建脚本的类路径中未加载自定义插件类,无法识别com.test.PluginImpl的类定义
正确配置步骤
步骤1:独立编译自定义插件类
自定义ByteBuddy插件的代码不能放在主项目源码目录中,主项目编译晚于ByteBuddy转换流程,会产生循环依赖。需要将插件代码放入优先编译的buildSrc模块:
- 在项目根目录新建
buildSrc/src/main/java/com/test/路径,将PluginImpl.java放入该路径 - 新建
buildSrc/build.gradle,添加如下配置:
plugins { id 'java' } repositories { mavenCentral() } dependencies { implementation 'net.bytebuddy:byte-buddy-gradle-plugin:1.11.18' }
buildSrc模块会在Gradle构建启动时优先编译,模块内的类会自动加入构建脚本的类路径,可被配置直接识别。
步骤2:调整主项目ByteBuddy配置
主项目的build.gradle中按如下方式配置即可:
byteBuddy { transformation { plugin = com.test.PluginImpl } }
替代方案(无需buildSrc)
如果不想单独维护buildSrc模块,也可以通过构建脚本类加载器动态加载插件类,配置如下:
byteBuddy { transformation { plugin = Class.forName("com.test.PluginImpl", true, buildscript.classLoader) } }
注意该方案仍需要保证com.test.PluginImpl类已经被提前编译并加入构建脚本的类路径中。
内容的提问来源于stack exchange,提问作者Anton Kudruk
相关产品推荐
相关产品推荐

