Я переношу сценарии сборки Gradle с Groovy на Kotlin DSL, и одна из вещей, которая на самом деле не документирована, - это то, как заполнить дополнительные свойства.
В Groovy я могу написать:
ext {
comp = 'node_exporter'
compVersion = '0.16.0'
compProject = 'prometheus'
arch = 'linux-amd64'
tarball = "v${compVersion}/${comp}-${compVersion}.${arch}.tar.gz"
downloadSrc = "https://github.com/${compProject}/${comp}/releases/download/${tarball}"
unzipDir = "${comp}-${compVersion}.${arch}"
}
Я понял, что в Kotlin DSL я могу добиться той же функциональности с помощью:
val comp by extra { "filebeat" }
val compVersion by extra { "6.4.0" }
val arch by extra { "linux-x86_64" }
val tarball by extra { "${comp}-${compVersion}-${arch}.tar.gz" }
val downloadSrc by extra { "https://artifacts.elastic.co/downloads/beats/${comp}/${tarball}" }
val unzipDir by extra { "${comp}-${compVersion}-${arch}" }
что выглядит довольно повторяющимся.
Реализация ExtraPropertiesExtension в Kotlin < / em> немного сложен, но, в конце концов, содержит просто старый добрый Map<String, Object>
.
Итак, мой вопрос: возможно ли заполнить объект extra
несколькими свойствами проще, чем просто повторять val myProp by extra { "myValue"}
?
mapOf
- ›forEach
-›extra.set()
), но IMHO оно запутывает цель (менее читабельно). - person Vít Kotačka   schedule 19.09.2018extra.properties.putAll(pairs = listOf( "comp" to "filebeat", "compVersion" to "6.4.0" ))
- person Czar   schedule 22.11.2018extra["key"] = "value"
- person Czar   schedule 22.11.2018