将现有的groovy build.gradle文件转换为基于kotlin的build.gradle.kts

时间:2017-11-06 12:17:46

标签: groovy kotlin gradle-kotlin-dsl

我的项目有两个不同的build.gradle文件,用groovy语法编写。 我想将这个groovy写入的gradle文件更改为用Kotlin语法(build.gradle.kts)编写的gradle文件。

我将向您展示根项目build.gradle文件。

    // Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    //ext.kotlin_version = '1.2-M2'
    ext.kotlin_version = '1.1.51'
    repositories {
        google()
        jcenter()

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.0-alpha01'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

    }
}

allprojects {
    repositories {
        google()
        jcenter()
        mavenCentral()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

我尝试了几种在互联网上找到的“方法”,但没有任何效果。重命名文件,显然不是解决方案,没有帮助。我在我的根项目中创建了一个新的build.gradle.kts文件,但该文件没有显示在我的项目中。 gradle也没有识别出新文件。

所以我的问题是:如何将我的groovy build.gradle文件转换为kotlin build.gradle.kts并将这个新文件添加到我现有的项目中?

感谢您的帮助。

1 个答案:

答案 0 :(得分:19)

当然重命名无济于事。您需要使用Kotlin DSL重新编写它。它与Groovy类似,但有一些差异。 Read their docs,请查看the examples

在您的情况下,问题是:

  1. ext.kotlin_version无效Kotlin语法,请使用square brackets
  2. 所有Kotlin strings都使用双引号
  3. 围绕most function calls的参数需要大括号(有例外情况,例如infix functions
  4. Slighlty不同的任务管理API。有不同的风格。您可以声明all the tasks in tasks block as strings,或使用单个类型的函数,如下例所示。
  5. 查看已转换的顶级build.gradle.kts

    // Top-level build file where you can add configuration options common to all sub-projects/modules.
    
    buildscript {
        ext["kotlin_version"] = "1.1.51"
        repositories {
            google()
            jcenter()
        }
        dependencies {
            classpath ("com.android.tools.build:gradle:3.1.0-alpha01")
            classpath ("org.jetbrains.kotlin:kotlin-gradle-plugin:${ext["kotlin_version"]}")
        }
    }
    
    allprojects {
        repositories {
            google()
            jcenter()
            mavenCentral()
        }
    }
    
    task<Delete>("clean") {
        delete(rootProject.buildDir)
    }