Gradle自定义插件跨项目复用 找不到依赖插件的问题咨询
问题根因
你在自定义插件的apply方法中动态添加buildscript classpath的时机太晚了,Gradle 解析插件ID的阶段早于自定义插件的执行时机,等你把Spring Boot插件依赖加入classpath的时候,插件查找流程已经结束,自然会报找不到对应插件的错误。
可行解决方案
你不需要在目标项目加任何配置,只要调整你的自定义插件配置即可,步骤如下:
- 将Spring Boot插件、依赖管理插件作为你自定义插件的自身依赖声明,这些依赖会跟随你的自定义插件一起被加载到构建classpath中,目标项目不需要额外感知
修改你的插件项目build.gradle,新增dependencies配置块:
dependencies { implementation 'org.springframework.boot:spring-boot-gradle-plugin:2.4.10' implementation 'io.spring.dependency-management:io.spring.dependency-management.gradle.plugin:1.0.11.RELEASE' }
- 删掉
DependencyManagementPlugin.java中往project.getBuildscript()添加classpath的两行代码,剩余apply插件的逻辑保留即可:
public class DependencyManagementPlugin implements Plugin<Project> { @Override public void apply(Project project) { PluginContainer plugins = project.getPlugins(); plugins.apply(MavenPublishPlugin.class); plugins.apply(JavaPlugin.class); plugins.apply(JacocoPlugin.class); plugins.apply("org.springframework.boot"); plugins.apply("io.spring.dependency-management"); } }
- 重新打包发布你的自定义插件,原有引用插件的业务项目不需要做任何修改,就能正常加载所有需要的插件。
该方案完全满足你统一管理依赖版本的需求,后续版本迭代只需要修改插件项目内的依赖版本重新发布即可,不需要修改所有业务项目的配置。
内容的提问来源于stack exchange,提问作者Sam Jing Wen
相关产品推荐
相关产品推荐

