通往 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.*
导入!那个被公众谴责的、不友好的、基于字符串的 "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 发布了一系列针对多项目构建的改进中的第一个,包括使用 Kotlin 在 buildSrc
中定义自定义构建逻辑的能力。
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,欢迎!