Gradle Script Kotlin 1.0 之路
介绍
五个月前,我们发布了 Gradle Script Kotlin 的第一个预发布版本,我们认为现在是回顾自那时以来我们取得的进展的好时机。在那段时间里,我们又发布了八个预发布版本,而且通往 1.0 的道路每天都变得更加清晰。那么,让我们回顾一下我们迄今为止所取得的成就以及我们未来的方向,好吗?
v0.1.0 #
你可能还记得,这是我们的 hello-world
示例在我们第一次发布时的样子
import org.gradle.api.plugins.*
import org.gradle.script.lang.kotlin.*
apply<ApplicationPlugin>()
configure<ApplicationPluginConvention> {
mainClassName = "samples.HelloWorld"
}
repositories {
jcenter()
}
dependencies {
"testCompile"("junit:junit:4.12")
}
噢,那个恼人的 org.gradle.script.lang.kotlin.*
导入!那个公开谴责的、对 IDE 不友好的、基于字符串的 "testCompile"
依赖配置!当然,对于那些勇敢尝试过的人来说,还有臭名昭著的 generateKtsConfig
和 patchIdeaConfig
任务,它们是让基于 Kotlin 的构建脚本在 IDEA 中工作所必需的。毫无疑问,那是早期阶段,它们带来了一些粗糙的边缘。
但尽管 0.1.0 版本存在缺陷,但其编程语言和 IDE 体验已经非常出色,让我们着迷。至于那些粗糙的边缘,我们已经看到了消除它们的方法,这促成了一个月后 0.2.0 版本的发布。
v0.2.0 #
随着隐式导入和对工具友好的、基于字符串的依赖配置的替代方案,hello-world
0.2.0 开始看起来简洁明了
apply<ApplicationPlugin>()
configure<ApplicationPluginConvention> {
mainClassName = "samples.HelloWorld"
}
repositories {
jcenter()
}
dependencies {
testCompile("junit:junit:4.12")
}
无缝的项目导入意味着 IDEA 中基于 Kotlin 的构建开始开箱即用,并且误输入 generateKtsConfig
和 patchIdeaConfig
的日子已经一去不复返了。
也许最重要的是,0.2.0 版本对构建脚本依赖项和外部插件的支持使 Gradle Script Kotlin 成为许多实际项目的可行选择。
v0.3.0 #
0.3.0 是该项目的一个重要里程碑,因为它是第一个包含在生产 Gradle 发行版中的版本——Gradle 3.0,毫不逊色!
而 0.3.0 完全是关于 Kotlin 的!新的 Kotlin 1.1-M01 编译器,对基于 Kotlin 的插件和 buildSrc
目录的支持,以及一些甜蜜的 Kotlin-Groovy 互操作性原语
gradle.buildFinished(closureOf<BuildResult> {
println("$action finished") // $action refers to BuildResult.getAction()
})
随着 Gradle 3.0 的发布,公共 Kotlin Slack 的 #gradle 频道参与度增加,这极大地帮助我们确定了接下来工作的优先级。
v0.3.1 #
我们注意到人们在配置依赖项时,苦于缺乏更类型安全和对 IDE 友好的方式,因此 0.3.1 版本带来了大大改进的依赖项 DSL
dependencies {
default(group = "org.gradle", name = "foo", version = "1.0") {
isForce = true
}
compile(group = "org.gradle", name = "bar") {
exclude(module = "foo")
}
runtime("org.gradle:baz:1.0-SNAPSHOT") {
isChanging = true
isTransitive = false
}
testCompile(group = "junit", name = "junit")
testRuntime(project(path = ":core")) {
exclude(group = "org.gradle")
}
}
升级到 Kotlin 1.1-dev-2053 显着提高了 IDEA 中代码辅助的性能,并且由于一位有价值的社区成员,第一个 Gradle Script Kotlin Android 示例得以发布。
v0.3.2 #
在 0.3.2 版本中,我们决定通过运行时代码生成 Kotlin 扩展来正面解决 可怕的 it
问题。什么是可怕的 it
问题? 以 copySpec
的使用为例。在 0.3.2 之前,人们会这样写
copySpec {
it.from("src/data")
it.include("*.properties")
}
这种语法读起来不太顺畅,并且偏离了 Gradle 一直以来以其流畅、可读的 DSL 而闻名的风格。但不用担心——在 0.3.2 版本中,it
消失了
copySpec {
from("src/data")
include("*.properties")
}
v0.3.3 和 v0.4.0 #
最近发布的 0.3.3 和 0.4.0 版本发布了对多项目构建的一系列改进中的第一个,包括在 buildSrc
中使用 Kotlin 定义自定义构建逻辑的能力。
0.4.0 版本现已可用,并将随即将发布的 Gradle 3.2 发行版一起发布。
迈向 v1.0.0 #
你问接下来是什么?以下是我们即将发布的版本在三个关键领域的一些亮点
- 性能:通过缓存编译后的构建脚本来加快项目配置速度 (#31)。
- 易用性:插件贡献的扩展和约定类型安全访问器 (#159);全面的文档 (#106)。
- 便利性:插件的声明式和工具友好型应用,又名
plugins
块 (#168)。
总而言之,这就是我们设想的 Gradle Script Kotlin 1.0 中 hello-world
示例的样子
plugins {
application
}
application {
mainClassName = "samples.HelloWorld"
}
repositories {
jcenter()
}
dependencies {
testCompile("junit:junit:4.12")
}
你觉得怎么样?我们很想听听你的想法。
非常感谢到目前为止一路同行的所有人,如果您刚开始使用 Gradle Script Kotlin,欢迎您!