Gradle 脚本 Kotlin 1.0 之路
五个月前,我们 宣布了 Gradle 脚本 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 发布了 一系列 对 多项目构建 的改进,包括 使用 Kotlin 在 buildSrc
中定义自定义构建逻辑 的能力。
0.4.0 现已推出,并将与即将发布的 Gradle 3.2 发行版一起发布。
走向 v1.0.0
您可能会问,接下来是什么?以下是我们即将发布的版本在三个关键领域的亮点
- 性能:通过缓存编译的构建脚本(#31)来加快项目配置。
- 可用性:对插件贡献的扩展和约定进行类型安全的访问器(#159);全面的文档(#106)。
- 便利性:插件的声明式和工具友好型应用,即
plugins
块(#168)。
总而言之,我们设想 hello-world
示例在 Gradle Script Kotlin 1.0 中将是这样的。
plugins {
application
}
application {
mainClassName = "samples.HelloWorld"
}
repositories {
jcenter()
}
dependencies {
testCompile("junit:junit:4.12")
}
你觉得怎么样?我们很乐意听取你的想法。
非常感谢所有一路陪伴我们的人,如果你刚开始使用 Gradle Script Kotlin,欢迎加入!