创建自定义插件并在另一个构建脚本中使用它

Posted

技术标签:

【中文标题】创建自定义插件并在另一个构建脚本中使用它【英文标题】:Create custom plugin and using it in another buildscript 【发布时间】:2021-11-14 03:15:36 【问题描述】:

尝试创建自定义插件以跨项目共享构建脚本逻辑。我已经添加了 buildscript 类路径依赖项,但它仍然说找不到插件。我不想在使用自定义插件的项目中手动操作它,因为我将来可能必须更改版本号。有什么解决办法吗?

DependencyManagementPlugin.java

public class DependencyManagementPlugin implements Plugin<Project> 

  @Override
  public void apply(Project project) 

    DependencyHandler dependencies = project.getBuildscript().getDependencies();
    dependencies.add("classpath", "org.springframework.boot:spring-boot-gradle-plugin:2.4.10");
    dependencies.add(
        "classpath",
        "io.spring.dependency-management:io.spring.dependency-management.gradle.plugin:1.0.11.RELEASE");

    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");
  

build.gradle

plugins 
    id 'groovy-gradle-plugin'
    id 'maven-publish'


gradlePlugin 
    plugins 
        dependencyManagementPlugin 
            id = 'com.example.dependency-management'
            implementationClass = 'com.example.DependencyManagementPlugin'
        
    

在另一个 build.gradle 中使用插件

plugins 
    id 'com.example.dependency-management'


...

错误信息:

An exception occurred applying plugin request [id: 'com.example.dependency-management']
> Failed to apply plugin 'com.example.dependency-management'.
   > Plugin with id 'org.springframework.boot' not found.

【问题讨论】:

【参考方案1】:

解决方法是在自定义gradle插件项目的build.gradle的dependencies块中添加依赖。

https://docs.gradle.org/current/samples/sample_convention_plugins.html

【讨论】:

以上是关于创建自定义插件并在另一个构建脚本中使用它的主要内容,如果未能解决你的问题,请参考以下文章

Android Gradle 插件Gradle 自定义 Plugin 插件 ⑦ ( 自定义 Gradle 插件导入方式 | buildSrc 插件导入 | 构建脚本中自定义插件 | 独立文件 )

使用 pkgbuild 将自定义步骤添加到安装

Android gradle 自定义插件

使用自定义 sbt 插件

Android Gradle 插件自定义 Gradle 插件模块 ① ( 在 Module 模块中自定义 Gradle 插件 | 创建自定义插件类型模块 | 手动导入相关依赖 )

为 Phonegap 构建创建自定义 AdMob 插件(适用于 iOS 和 Android)