【发布时间】:2018-06-30 18:35:39
【问题描述】:
我使用 TeamCity Kotlin DSL 2018.1 来设置构建配置。我的 settings.kts 文件如下所示:
version = "2018.1"
project {
buildType {
id("some-id")
name = "name"
steps {
ant {
name = "Step1"
targets = "target1"
mode = antFile { path = "/some/path" }
workingDir = "/some/dir"
jdkHome = "some_jdk"
}
ant {
name = "Step2"
targets = "target2"
mode = antFile { path = "/some/path" }
workingDir = "/some/dir"
jdkHome = "some_jdk"
}
...
}
}
}
它按预期工作,但我想避免一遍又一遍地为每一步编写相同的重复参数。
我尝试编写函数,该函数将构建预填充默认值的构建步骤:
fun customAnt(init: AntBuildStep.() -> kotlin.Unit): AntBuildStep {
val ant_file = AntBuildStep.Mode.AntFile()
ant_file.path = "/some/path"
val ant = AntBuildStep()
ant.mode = ant_file
ant.workingDir = "/some/dir"
ant.jdkHome = "some_jdk"
return ant
}
project {
buildType {
id("some-id")
name = "name"
steps {
customAnt {
name = "Step1"
targets = "target1"
}
customAnt {
name = "Step2"
targets = "target2"
}
...
}
}
}
它编译但不起作用:TeamCity 只是忽略以这种方式定义的构建步骤。
很遗憾,official documentation 不包含任何有关自定义和扩展 DSL 的信息。可能,我在 Kotlin 的 () -> Unit 构造中做错了,但无法找出究竟是什么问题。
【问题讨论】: