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

Gradle插件中Groovy DSL的SourceSet定义转Kotlin DSL实现方案

Gradle插件Kotlin DSL自定义SourceSet实现方案

报错原因

Kotlin是静态类型语言,不支持Groovy DSL的动态属性访问特性,你遇到的sourceSets未解析引用问题,是因为不能直接调用project.sourceSets这类Groovy特有的动态方法,必须显式通过JavaPluginExtension获取SourceSet容器。

完整转换代码

import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.plugins.JavaPluginExtension
import org.gradle.api.tasks.SourceSet

class JavaConventionsPlugin : Plugin<Project> {
    // ...
    private fun scratchConfiguration(project: Project) {
        // 先获取Java插件扩展,确保项目已应用Java插件
        val javaExtension = project.extensions.getByType(JavaPluginExtension::class.java)
        val sourceSets = javaExtension.sourceSets

        // 创建自定义scratch源集,Gradle会自动生成对应的编译、运行配置
        sourceSets.create("scratch")

        val mainSourceSet = sourceSets.getByName(SourceSet.MAIN_SOURCE_SET_NAME)
        val configurations = project.configurations

        // 配置scratch配置继承主源集的依赖
        configurations.named("scratchCompile") {
            it.extendsFrom(configurations.getByName("mainCompile"))
        }
        configurations.named("scratchRuntime") {
            it.extendsFrom(configurations.getByName("mainRuntime"))
        }
        configurations.named("scratchCompileOnly") {
            it.extendsFrom(configurations.getByName("compileOnly"))
        }
        configurations.named("scratchImplementation") {
            it.extendsFrom(configurations.getByName("implementation"))
        }
        configurations.named("scratchRuntimeOnly") {
            it.extendsFrom(configurations.getByName("runtimeOnly"))
        }

        // 声明scratch源集依赖主源集的输出
        project.dependencies.add("scratchImplementation", mainSourceSet.output)
    }
}

注意事项

  • 调用该方法前需要确保项目已经应用Java插件,否则获取JavaPluginExtension会抛出异常,可添加前置判断:
    if (project.plugins.hasPlugin("java")) {
        scratchConfiguration(project)
    }
    
  • 如果你使用的是较新版本Gradle(7.0+),可以用Kotlin扩展方法简化写法,核心逻辑保持一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:36:01