Gradle Kotlin DSL:在独特的地方定义Kotlin版本
为了描述Gradle构建脚本,我们可以通过build.gradle.kts
文件使用Kotlin。 全局定义要使用的 Kotlin版本是一个常见的问题,无论是在dependencies
还是在构建plugin
部分。
考虑下面的代码(Gradle 4.3.1):
plugins { var pluginVersion = "1.2.0" kotlin("jvm").version(kotlinVersion) // more } var dependencyVersion = "1.2.0" dependencies { compile(kotlin("stdlib", kotlinVersion)) compile(kotlin("reflect", kotlinVersion)) testCompile(kotlin("test", kotlinVersion)) // more }
正如你所看到的,kotlin version
(在这种情况下是1.2.0)被定义了两次 : dependencyVersion
和pluginVersion
,通常不会有区别 。 由于DSL限制,无法从plugins
块外部访问pluginVersion
,也无法从plugins
块内访问dependencyVersion
。
如何将版本字符串"1.2.0"
提取到一个地方?
您可以从插件类中提取版本:
import org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper plugins { kotlin("jvm") version "1.2.0" } val kotlinVersion = plugins.getPlugin(KotlinPluginWrapper::class.java).kotlinPluginVersion
有一个解决方法可用,它搜索为kotlin插件定义的版本,并将其分配给外部variables。 以下说明这一点:
val kotlinVersion: String? by extra { buildscript.configurations["classpath"] .resolvedConfiguration.firstLevelModuleDependencies .find { it.moduleName == "kotlin-gradle-plugin" }?.moduleVersion } plugins { kotlin("jvm").version("1.2.0") //more }
如此定义的kotlinVersion
现在可以在没有进一步麻烦的dependencies
使用。
在更高版本的Gradle中,您不再需要指定kotlin(stdlib|reflect|test)
依赖项的版本,Kotlin插件将自动为您配置它们。
至于提取依赖到一个地方,有两个主要模式:
- 定义要在
buildSrc/src/main/kotlin/
中的对象中共享的常量,并在构建脚本中使用该对象,buildSrc
代码可用于整个脚本,包括plugins
块 -
使用系统属性,您可以通过在
gradle.properties
中gradle.properties
名称来在gradle.properties
定义一个系统属性systemProp.
你可以通过System.getProperties()
来访问系统属性,例如:// build.gradle.kts plugins { val kotlinVersion by System.getProperties() println("Kotlin version is $kotlinVersion") } // gradle.properties systemProp.kotlinVersion=1.2.20
- 'com.android.tools.build:gradle:3.0.0-alpha3'和'com.android.tools.build:gradle:3.0.0-alpha1'有什么区别?
- 如何覆盖gradle kotlin-dsl中的任务
- 具有不同源代码集的Gradle任务
- java.lang.NoClassDefFoundError:kotlin / jvm / internal / intrinsics in libgdx
- Gradle,’url’不能用于(java.lang.String)
- 库与Gradle 3.0.0-alphaX的依赖关系问题
- 编译Android项目
- 错误:与依赖项冲突com.google.code.findbugs:jsr305'
- 如何用gradle kotlin脚本创建fat jar