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

如何为Kotlin实现的Gradle插件添加嵌套配置?

实现Gradle插件的嵌套配置(Kotlin版)

1. 定义嵌套的Nexus配置类

先把nexus相关配置抽离到单独的抽象类中,替代原来分散的四个属性:

import org.gradle.api.provider.Property

abstract class NexusExtension {
    abstract val server: Property<String>
    abstract val user: Property<String>
    abstract val pass: Property<String>
    abstract val repository: Property<String>
}

2. 修改主插件扩展类

将原扩展类中的nexus属性替换为嵌套的NexusExtension,并添加@Nested注解让Gradle识别这是嵌套配置:

import org.gradle.api.Nested
import org.gradle.api.provider.Property

abstract class MyPluginExtension {
    // 保留原有非nexus相关属性(如果有)

    @get:Nested
    abstract val nexus: NexusExtension
}

3. 调整插件类的扩展初始化与任务绑定

创建主扩展时,Gradle会自动初始化嵌套的NexusExtension,无需手动创建。修改任务的属性绑定逻辑,直接从嵌套扩展中读取值:

import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.register

class MyPlugin : Plugin<Project> {
    override fun apply(target: Project) {
        val extension = target.extensions.create("myName", MyPluginExtension::class.java)

        target.tasks.register<MyTask>("taskName") {
            group = "myGroup"
            description = "Do something"

            nexusServer.set(extension.nexus.server)
            nexusUser.set(extension.nexus.user)
            nexusPass.set(extension.nexus.pass)
            nexusRepository.set(extension.nexus.repository)
        }
    }
}

4. 验证嵌套配置用法

现在在使用插件的项目中,即可采用期望的嵌套配置形式:

myName {
    nexus {
        server.set("https://some-url")
        user.set("some-user")
        pass.set("some-password-taken-from-env-variable-provider")
        repository.set("some repository")
    }
}

关键注意事项

  • 嵌套配置类必须是抽象类,使用Gradle提供的Property等延迟求值类型,保证配置的懒加载和可增量性
  • 主扩展类中的嵌套属性必须添加@Nested注解,Gradle会自动处理嵌套扩展的实例化和配置闭包解析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:16:07