【发布时间】:2019-09-10 14:00:45
【问题描述】:
我有一个简单的 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 属性。
public class PublishSpec {
var name: String
var artifact: String = ""
var taskName: String = ""
var type: String = "default"
constructor(name: String) {
this.name = name
}
}
但是,以下只是将all 与core 评估为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
【问题讨论】:
-
我建议您遵循 Gradle 的最新官方指南。 guides.gradle.org/implementing-gradle-plugins/… 和 docs.gradle.org/current/userguide/…