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

从buildSrc迁移到build-logic后,根项目Gradle任务类不可见如何解决?

根项目访问build-logic任务类/注册专属约定插件解决方案

一、让根项目可见build-logic中的任务类

参照Now in Android的build-logic结构,按以下步骤配置即可让根项目引用到build-logic内的任务类:

  1. 存放任务类到指定目录
    将下载本地化资源的任务类放在build-logic/convention/src/main/kotlin/下的自定义包路径中,比如com/yourcompany/buildlogic/tasks/LocalizationDownloadTask.kt。
  2. 配置复合构建关联
    根项目的settings.gradle.kts中必须包含build-logic的复合构建配置,确保根项目能识别build-logic模块:
    includeBuild("build-logic") {
        dependencySubstitution {
            substitute(module("com.yourcompany.buildlogic:convention")).using(project(":convention"))
        }
    }
    
  3. 根项目添加build-logic依赖
    在根项目的build.gradle.kts中通过buildscript引入build-logic的convention模块依赖:
    buildscript {
        dependencies {
            classpath("com.yourcompany.buildlogic:convention")
        }
    }
    
    完成后即可在根项目中直接注册任务:
    tasks.register<com.yourcompany.buildlogic.tasks.LocalizationDownloadTask>("downloadLocalization") {
        // 配置任务参数,比如指定各子模块的res/values输出目录
        outputDirs.set(subprojects.map { it.layout.projectDirectory.dir("src/main/res/values") })
    }
    

二、为根项目注册专属约定插件

更规范的方式是给根项目单独编写约定插件,避免在根项目脚本中直接写任务注册逻辑:

  1. 创建根项目插件类
    在build-logic/convention/src/main/kotlin/下创建RootConventionPlugin.kt:
    class RootConventionPlugin : Plugin<Project> {
        override fun apply(target: Project) {
            // 校验仅根项目可应用该插件
            check(target == target.rootProject) { "此插件仅允许应用于根项目" }
            
            // 注册本地化资源下载任务
            target.tasks.register<LocalizationDownloadTask>("downloadLocalization") {
                // 配置任务逻辑,比如关联子模块输出目录
                outputDirs.set(target.subprojects.map { it.layout.projectDirectory.dir("src/main/res/values") })
            }
        }
    }
    
    // 扩展函数简化插件引用
    fun Project.applyRootConvention() {
        apply<RootConventionPlugin>()
    }
    
  2. 声明插件ID
    在build-logic/convention/src/main/resources/META-INF/gradle-plugins/com.yourcompany.buildlogic.root-convention.properties中添加插件映射:
    implementation-class=com.yourcompany.buildlogic.RootConventionPlugin
    
  3. 根项目应用插件
    根项目的build.gradle.kts中直接应用该插件:
    plugins {
        id("com.yourcompany.buildlogic.root-convention")
    }
    

更新说明

build-logic是用于定义项目特定约定插件的目录,参考了Now in Android应用的示例结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:45:58