Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gradle 在kotlin生成文件中执行已注册的任务_Gradle_Kotlin_Groovy_Gradle Kotlin Dsl - Fatal编程技术网

Gradle 在kotlin生成文件中执行已注册的任务

Gradle 在kotlin生成文件中执行已注册的任务,gradle,kotlin,groovy,gradle-kotlin-dsl,Gradle,Kotlin,Groovy,Gradle Kotlin Dsl,我需要将用Groovy编写的gradle构建脚本转换为Kotlin。问题是,在一个任务中的Groovy构建文件中,会执行之前定义的另一个任务。然而,在Kotlin中似乎没有对此的支持,至少我在API中找不到任何支持 我研究了API并搜索了类似的问题,但没有找到任何有用的东西 Groovy代码如下所示: task doSomething () { ... } task anotherTask () { ... doSomething.execute() ... } 这个电

我需要将用Groovy编写的gradle构建脚本转换为Kotlin。问题是,在一个任务中的Groovy构建文件中,会执行之前定义的另一个任务。然而,在Kotlin中似乎没有对此的支持,至少我在API中找不到任何支持

我研究了API并搜索了类似的问题,但没有找到任何有用的东西

Groovy代码如下所示:

task doSomething () {
   ...
}
task anotherTask () {
   ...
   doSomething.execute()
   ...
}
这个电话怎么翻译成Kotlin

doSomething.execute()

Kotlin是静态类型的。因此,如果Kotlin无法为您推断,您必须知道
doSomething
anotherTask
的任务类型<代码>执行让我相信它是某种执行任务。以你为例:

val doSomething = tasks.register("doSomething", JavaExec::class.java) {
    main = "com.example.Example"
}

val anotherTask = tasks.register("anotherTask") {
    doSomething.get().exec()
}
但是,看起来您只是想在另一个任务之前执行
doSomething
,因此您需要:

val doSomething = tasks.register("doSomething", JavaExec::class.java) {
    main = "com.example.Example"
}

val anotherTask = tasks.register("anotherTask") {
    dependsOn(doSomething)
}

如果不知道任务的类型,就很难给你正确的答案。

Kotlin是静态类型的。因此,如果Kotlin无法为您推断,您必须知道
doSomething
anotherTask
的任务类型<代码>执行让我相信它是某种执行任务。以你为例:

val doSomething = tasks.register("doSomething", JavaExec::class.java) {
    main = "com.example.Example"
}

val anotherTask = tasks.register("anotherTask") {
    doSomething.get().exec()
}
但是,看起来您只是想在另一个任务之前执行
doSomething
,因此您需要:

val doSomething = tasks.register("doSomething", JavaExec::class.java) {
    main = "com.example.Example"
}

val anotherTask = tasks.register("anotherTask") {
    dependsOn(doSomething)
}
在不知道任务类型的情况下,很难给你正确的答案。

你不应该对任务调用
execute()
。相反,正确设置输入、输出和依赖项,如果需要,Gradle将为您调用任务

比如:

tasks {
    val doSomething by registering {
        doLast {
            println("running doSomething")
        }
    }

    val anotherTask by registering {
        dependsOn(doSomething)
        doLast {
             println("Running anotherTask")
        } 
    }
}
然后:

决不能对任务调用
execute()
。相反,正确设置输入、输出和依赖项,如果需要,Gradle将为您调用任务

比如:

tasks {
    val doSomething by registering {
        doLast {
            println("running doSomething")
        }
    }

    val anotherTask by registering {
        dependsOn(doSomething)
        doLast {
             println("Running anotherTask")
        } 
    }
}
然后:


方法
execute
在Gradle中不再可用(从5.0开始),因此这不是Groovy和Kotlin之间的差异造成的。它通常出现在较旧的版本中,但实际上不应该使用,因为它可能会干扰Gradle任务执行系统。Gradle中不再提供方法
execute
(自5.0以来),因此这不是Groovy和Kotlin之间的差异造成的。它通常出现在较旧的构建中,但实际上不应该使用,因为它可能会干扰Gradle任务执行系统。