内容简介:Gradle是一款基于JVM的新一代构建工具,使用一种基于Groovy的特定领域语言(DSL)来声明项目设置。目前,Gradle 官方也提供了基于 Kotlin 的构建脚本语言:虽然都是基于Jvm的语言,但两者还是有着比较大的差异,但各自都有自己的优势groovy是动态类型脚本语言,可以直接当做脚本跑。语言也比较灵活。Kotlin语言比Groovy语言更加严格,并且具有内置的空安全性。
Gradle是一款基于JVM的新一代构建工具,使用一种基于Groovy的特定领域语言(DSL)来声明项目设置。目前,Gradle 官方也提供了基于 Kotlin 的构建脚本语言: Gradle Kotlin DSL , 提供了类 groovy 的代码风格。Gradle官网上也有从Groovy迁移到Kotlin的指南: Migrating build logic from Groovy to Kotlin
Groovy or Kotlin
虽然都是基于Jvm的语言,但两者还是有着比较大的差异,但各自都有自己的优势
语法差异
groovy是动态类型脚本语言,可以直接当做脚本跑。语言也比较灵活。Kotlin语言比Groovy语言更加严格,并且具有内置的空安全性。
IDE支持
Android Studio都对两者有很好地支持。不过毕竟Kotlin是亲儿子,不排除会对其推出些特殊的支持。还有一点差别Kotlin DSL脚本改动后,studio会自动同步改动,而不是像原来一样会出现一个按钮来手动触发。这点上我更喜欢原来的方式。
脚本文件的命名
*.gradle *.gradle.kts
所以要使用Kotlin DSL编写Gradle编译脚本,只需要将 build.gradle
改为 build.gradle.kts
即可,同理 settings.gradle
文件也可以被重命名为 settings.gradle.kts
。
另外Groovy DSL脚本文件和Kotlin DSL脚本文件可以共存,可以不用全部替换。
构建速度
官网上介绍说采用Kotlin DSL,全量构建的时候会慢一些,不过实际编译时差距不明显,在可接受范围内。
语法介绍
Groovy字符串可以用单引号引用 '字符串'
或双引号 “字符串”
,而Kotlin只能使用双引号 “字符串”
。
Groovy中函数调用的时候,如果只有一个参数,还可以不加括号;
转换前:
implementation 'androidx.appcompat:appcompat:1.1.0-alpha01' 复制代码
转换后:
implementation("androidx.appcompat:appcompat:1.1.0-alpha01") 复制代码
转换前:
applicationId "org.renny.test" minSdkVersion 15 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 复制代码
转换后:
applicationId = "org.renny.test" minSdkVersion(15) targetSdkVersion(28) versionCode = 1 versionName = "1.0" testInstrumentationRunner = "android.support.test.runner.AndroidJUnitRunner" 复制代码
apply(plugin = "com.android.application") apply(plugin = "kotlin-android") apply(plugin = "kotlin-android-extensions") 复制代码
plugins { id("com.android.application") kotlin("android") kotlin("android.extensions") } 复制代码
使用插件
//groovy buildscript { repositories { gradlePluginPortal() } dependencies { classpath('org.springframework.boot:spring-boot-gradle-plugin:2.0.2.RELEASE') } } apply plugin: 'java' apply plugin: 'jacoco' apply plugin: 'org.springframework.boot' 复制代码
//kotlin buildscript { repositories { gradlePluginPortal() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:2.0.2.RELEASE") } } apply(plugin = "java") apply(plugin = "jacoco") apply(plugin = "org.springframework.boot") 复制代码
不过官方强烈推荐采用 plugins {}
的方式引入插件
plugins { id 'com.android.application' } 复制代码
plugins { id("com.android.application") kotlin("android") kotlin("android.extensions") } 复制代码
上面的kotlin()是kotlin DSL定义的扩展属性:
fun PluginDependenciesSpec.kotlin(module: String): PluginDependencySpec = id("org.jetbrains.kotlin.$module") 复制代码
创建Gradle Task
task greeting { doLast { println 'Hello, World!' } } 复制代码
task("greeting") { doLast { println("Hello, World!") } } 复制代码
小结
本文介绍并比较了Gradle’的Groovy DSL 和 Kotlin DSL 的一些语法差异,并且为迁移到 Kotlin DSL 提供了一些基础介绍。总体来说,两者并没有太大的优劣差异,如果你对Kotlin情有独钟或者感兴趣,可以尝试使用下 Kotlin DSL
以上所述就是小编给大家介绍的《Gradle Kotlin DSL迁移指南》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- webpack 4迁移指南
- webpack 4迁移指南
- SVN 迁移至 Git 指南
- 神经风格迁移指南(第一部分)
- Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
- Spring Cloud Alibaba迁移指南1:零代码从Eureka迁移到Nacos 原 荐
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。