Gradle Kotlin DSL:在獨特的地方定義Kotlin版本

在使用Gradle Kotlin DSL 的過程中一直在找一種優雅的定義版本的方式

以下是我總結的幾種方案:

1. 從插件類中提取版本:

搜索 kotlin插件 文件中定義的版本,並將其分配給外部變量:

import org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper

plugins {
    kotlin("jvm") version "1.2.41"
}

//以下兩種方式都可以,建議選第一種
val kotlinVersion: String? by extra { plugins.getPlugin(KotlinPluginWrapper::class.java).kotlinPluginVersion } 

val kotlinVersion: String? by extra {
    buildscript.configurations["classpath"]
            .resolvedConfiguration.firstLevelModuleDependencies
            .find { it.moduleName == "kotlin-gradle-plugin" }?.moduleVersion
}

2. 常量定義:

在更高版本的Gradle中,不再需要指定 kotlin(stdlib|reflect|test)依賴的版本,Kotlin插件會自動配置它們。 如果想提取依賴關係到一個地方,主要有以下2個方案:

  • 定義一個想要在buildSrc/src/main/kotlin/內的對象中共享的常量,並在構建腳本中使用該對象,代碼從buildSrc可用於整個腳本,包括plugins塊。
  • 使用系統屬性,你可以定義一個系統屬性通過在gradle.properties前面加上systemProp.作爲名字,你可以通過System.getProperties()訪問系統屬性,例如:
// build.gradle.kts
plugins {
  val kotlinVersion by System.getProperties()
  println("Kotlin version is $kotlinVersion")
  kotlin("jvm") version kotlinVersion
  kotlin("plugin.spring") version kotlinVersion
}

// gradle.properties
systemProp.kotlinVersion=1.2.41
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章