You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle包含构建中,如何从一个约定插件引入另一个?

Gradle包含构建中约定插件间依赖配置问题

问题背景

使用包含构建(将buildlogic作为独立包含构建)搭建多项目Gradle架构,已拆分出common、library、app三个约定插件子项目,希望在library和app插件中引入common插件的通用逻辑,但直接在插件脚本的plugins块中引用id("buildlogic-common")时,Gradle提示找不到该插件。

解决方案

核心问题是包含构建内部的插件子项目依赖关系未正确配置,需按以下步骤调整:

1. 配置buildlogic的settings.gradle.kts

确保所有插件子项目被Gradle识别:

// buildlogic/settings.gradle.kts
include(":common", ":library", ":app")

2. 正确配置common插件项目

在common/build.gradle.kts中,将其声明为Gradle预编译脚本插件项目并注册插件ID:

plugins {
    `kotlin-dsl` // 支持Kotlin DSL编写插件
}

gradlePlugin {
    plugins {
        create("commonPlugin") {
            id = "buildlogic-common" // 定义插件ID,与后续引用保持一致
            implementationClass = "buildlogic.common.gradle.kts" // 指向预编译脚本文件路径
        }
    }
}

repositories {
    gradlePluginPortal()
    mavenCentral()
}

3. 在library/app插件项目中依赖common项目

在library/build.gradle.kts和app/build.gradle.kts中,添加对common项目的依赖,让Gradle能解析buildlogic-common插件:

plugins {
    `kotlin-dsl`
}

dependencies {
    // 依赖common插件项目,建立内部依赖关系
    implementation(project(":common"))
}

gradlePlugin {
    plugins {
        create("libraryPlugin") {
            id = "buildlogic-library" // library插件的ID
            implementationClass = "buildlogic.library.gradle.kts"
        }
    }
}

repositories {
    gradlePluginPortal()
    mavenCentral()
}

4. 在插件脚本中引用common插件

完成上述配置后,即可在buildlogic.library.gradle.kts中正常引用common插件:

plugins {
    id("buildlogic-common")
}

// 此处添加library插件的专属构建逻辑

主项目settings.gradle.kts补充配置

确保主构建能识别包含构建的插件:

// my-project/settings.gradle.kts
includeBuild("buildlogic") {
    dependencySubstitution {
        substitute(module("buildlogic:common")).using(project(":common"))
        substitute(module("buildlogic:library")).using(project(":library"))
        substitute(module("buildlogic:app")).using(project(":app"))
    }
}

// 引入业务模块
include(":module-a", ":module-b")

关键说明

  • 包含构建内部的插件子项目必须通过implementation(project(":xxx"))建立依赖,Gradle才能关联插件ID与对应项目;
  • 每个插件项目都需通过gradlePlugin块注册插件ID和实现类路径;
  • 所有插件项目需配置kotlin-dsl插件和必要仓库,确保依赖可正常下载。

内容的提问来源于stack exchange,提问作者Ulrich Schuster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 17:33:28