gpt4 book ai didi

Gradle NamedDomainObject 从未配置过

转载 作者:行者123 更新时间:2023-12-03 05:33:34 25 4
gpt4 key购买 nike

我有一个简单的 kotlin gradle 插件,可以创建 container并对其中的每个元素执行一些操作,例如container.all { doSomething() } .但是,似乎 NamedDomainObjectCollection曾经正确配置过。当all被调用时,每个元素都有初始默认值。

创建容器并添加它。

// create publish container
val publishContainer: NamedDomainObjectCollection<PublishSpec> = project.container(PublishSpec::class.java)
project.extensions.add(CONTAINER_NAME, publishContainer)

// for every element in the publishing container
publishContainer.all {
addPublicationRepository(this, myProject)
addPublication(this, myProject)
}
PublishSpec是一个相当简单的类,具有 4 个可变属性,包括必需的 name属性(property)。
public class PublishSpec {

var name: String
var artifact: String = ""
var taskName: String = ""
var type: String = "default"

constructor(name: String) {
this.name = name
}
}

但是,以下只是评估 allcore作为 default类型。
plugins {
id "my-publish"
}

myPublish {
"core" {
artifact = "foo.zip"
type = "archive"
taskName = "fooTask"
}
}

这不再起作用了吗?

https://mrhaki.blogspot.com/2016/02/gradle-goodness-create-objects-with-dsl.html

最佳答案

终于发现是我误会了容器的all的用法api。原来all旨在在添加元素时执行代码,但这并不意味着该对象已被配置。所以,我在 all 中看到了预期的行为。关闭,作为代表PublishSpec instance 仅使用默认值初始化。

为了获得我的预期行为,您必须在 afterEvaluate 中迭代容器而不是依赖all

project.afterEvaluate {
publishContainer.forEach {
addPublicationRepository(this, myProject)
addPublication(this, myProject)
}
}

请注意,在我引用的博客文章中, all用于与我最初尝试的不同的上下文中。评估项目后执行任务。

关于Gradle NamedDomainObject 从未配置过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57872469/

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