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

如何在Gradle根项目中向指定子项目应用闭包(排除特定项目)?

解决Gradle多项目中向部分子项目应用配置的问题

Groovy DSL 实现方式

方式1:通过条件过滤子项目

在subprojects闭包中添加判断逻辑,只对目标项目应用配置:

subprojects {
    // 排除:bar项目,对其余子项目生效
    if (name != 'bar') {
        apply plugin: '你的插件ID'
        // 这里添加共享配置,比如依赖、版本等
        group = 'com.example'
        version = '1.0.0'
        dependencies {
            implementation 'org.slf4j:slf4j-api:2.0.7'
        }
    }
}

也可以精准指定需要配置的项目:

subprojects {
    if (name in ['foo1', 'foo2']) {
        apply plugin: '你的插件ID'
        // 共享配置内容
    }
}

方式2:定义自定义项目集合

先筛选出目标子项目,再统一应用闭包,代码可读性更强:

// 筛选所有名称以foo开头的子项目
def fooProjects = subprojects.findAll { it.name.startsWith('foo') }
fooProjects.each { project ->
    project.apply plugin: '你的插件ID'
    project.with {
        // 共享配置
        group = 'com.example'
        dependencies {
            testImplementation 'junit:junit:4.13.2'
        }
    }
}

方式3:直接指定多个项目路径

Gradle支持通过project()方法传入多个项目路径,一次性配置:

project(':foo1', ':foo2') {
    apply plugin: '你的插件ID'
    // 共享配置内容
}

Kotlin DSL 实现方式

方式1:过滤子项目批量配置

subprojects.filter { it.name in setOf("foo1", "foo2") }.configureEach {
    plugins.apply("你的插件ID")
    // 共享配置
    group = "com.example"
    version = "1.0.0"
    dependencies {
        implementation("org.slf4j:slf4j-api:2.0.7")
    }
}

方式2:指定多个项目路径配置

projects(":foo1", ":foo2").configureEach {
    plugins.apply("你的插件ID")
    // 共享配置内容
}

注意事项

  • 如果后续会新增同类型子项目(比如:foo3),用名称前缀过滤的方式更灵活,无需修改配置;
  • 若需要精确控制目标范围,直接指定项目路径或名称列表的方式更可靠,避免误配置其他项目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:12:45