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

如何通过Gradle插件为scratch source set添加对main源码集的依赖

实现方案

你可以直接在插件的apply逻辑中按以下方式实现,以下分别给出Groovy和Kotlin两种语言编写插件的示例:

Groovy 插件实现

import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.SourceSetContainer

class ScratchPlugin implements Plugin<Project> {
    void apply(Project project) {
        // 预先应用Java插件,确保SourceSet相关能力可用
        project.pluginManager.apply('java')
        
        SourceSetContainer sourceSets = project.extensions.getByType(SourceSetContainer)
        
        // 注册scratch源码集,如果你已经实现过这步可以直接跳过
        SourceSet scratchSourceSet = sourceSets.create('scratch') {
            java.srcDir 'src/scratch/java'
            resources.srcDir 'src/scratch/resources'
        }
        
        // 等价于构建文件中声明的scratchImplementation依赖配置
        project.dependencies.add(
            scratchSourceSet.implementationConfigurationName,
            sourceSets.named('main').get().output
        )
    }
}

Kotlin 插件实现

import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.SourceSetContainer

class ScratchPlugin : Plugin<Project> {
    override fun apply(project: Project) {
        // 预先应用Java插件,确保SourceSet相关能力可用
        project.pluginManager.apply("java")
        
        val sourceSets = project.extensions.getByType(SourceSetContainer::class.java)
        
        // 注册scratch源码集,如果你已经实现过这步可以直接跳过
        val scratchSourceSet = sourceSets.create("scratch") {
            it.java.srcDir("src/scratch/java")
            it.resources.srcDir("src/scratch/resources")
        }
        
        // 等价于构建文件中声明的scratchImplementation依赖配置
        project.dependencies.add(
            scratchSourceSet.implementationConfigurationName,
            sourceSets.named("main").get().output
        )
    }
}

注意事项

  • 建议使用scratchSourceSet.implementationConfigurationName获取配置名,而非硬编码"scratchImplementation",可以更好兼容不同Gradle版本的配置命名规则
  • 如果你开发的是针对Java生态其他插件(比如java-library、kotlin-jvm)的扩展,只需要替换apply的插件ID即可,SourceSet相关逻辑完全通用

内容的提问来源于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.28 18:54:03