gpt4 book ai didi

gradle - Gradle扩展名为Closure的NamedDomainObjectContainer

转载 作者:行者123 更新时间:2023-12-03 04:02:47 24 4
gpt4 key购买 nike

我正在尝试构建一个允许以下内容的Gradle插件:

myPluginConfig {
something1 {
// this is a closure
}
somethingElse {
// this is another closure
}
// more closures here
}

为此,我可以确定我需要使用 NamedDomainObjectContainer来包装 Closure集合,因此我设置了以下插件:
class SwitchDependenciesPlugin implements Plugin<Project> {
void apply(Project project) {
// add the extension
project.getExtensions().myPluginConfig = project.container(Closure)
// read the current configuration
NamedDomainObjectContainer<Closure> config = project.myPluginConfig
// test it out, always returns []
System.out.println(config)
}
}

我在做什么错,我需要改用 project.extensions.create吗?如果是这样,怎么办?

编辑:我的用例包括根据项目层次结构中定义的某些变量添加依赖项。例如,如果在 redred上定义了 project.ext变量,则以下配置将添加 gson项目:
myPluginConfig {
redTrue {
compile project(':red')
}
redFalse {
compile 'com.google.code.gson:gson:2.4'
}
greenTrue {
compile project(':green')
}
}

对于此用例,我需要具有 myPluginConfig的动态名称,因此必须具有 MapNamedDomainObjectContainer

最佳答案

您能否在此详细说明您要建模的内容?我认为您有两种选择。一种是使用NamedDomainObjectContainer。在这里,您需要一个代表“某物”的类。看一下Gradle用户指南中有关维护多个域对象的章节(请参阅https://docs.gradle.org/current/userguide/custom_plugins.html#N175CF),“内容”为“书”。如上所述的内置配置语法是免费提供的。

如果您希望具有类似上面的语法而无需维护多个域对象,则可以简单地将一个将Closure作为参数的方法添加到Extension类中:

void somethingToConfigure(Closure) {
}

关于gradle - Gradle扩展名为Closure的NamedDomainObjectContainer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34120270/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com