使用 gradle kotlin dsl 执行 JavaExec 任务

lap*_*ots 5 gradle kotlin gradle-kotlin-dsl

我创建了简单的build.gradle.kts文件

group  = "com.lapots.breed"
version = "1.0-SNAPSHOT"

plugins { java }

java { sourceCompatibility = JavaVersion.VERSION_1_8 }

repositories { mavenCentral() }

dependencies {}

task<JavaExec>("execute") {
    main = "com.lapots.breed.Application"
    classpath = java.sourceSets["main"].runtimeClasspath
}
Run Code Online (Sandbox Code Playgroud)

src/main/java/com.lapots.breedApplication用 main 方法创建类

package com.lapots.breed;

public class Application {
    public static void main(String[] args) {
        System.out.println("Hello, world!");
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试执行execute任务时,它失败了,错误是任务不存在。此外,当我列出所有可用的任务时,gradlew tasks它不会显示execute任务。

问题是什么?

Vít*_*čka 9

以下构建脚本应该可以工作(Gradle 4.10.2、Kotlin DSL 1.0-rc-6):

group = "com.lapots.breed"
version = "1.0-SNAPSHOT"

plugins {
    java
}

java {
    sourceCompatibility = JavaVersion.VERSION_1_8
}

repositories {
    mavenCentral()
}

task("execute", JavaExec::class) {
    main = "com.lapots.breed.Application"
    classpath = sourceSets["main"].runtimeClasspath
}
Run Code Online (Sandbox Code Playgroud)

根据未列出的任务 - 从某些版本开始,Gradle 不会显示未分配AbstractTask.group 的自定义任务。您可以通过 列出它们gradle tasks --all,也可以group在给定的任务上设置属性,例如:

task("execute", JavaExec::class) {
    group = "myCustomTasks"
    main = "com.lapots.breed.Application"
    classpath = sourceSets["main"].runtimeClasspath
}
Run Code Online (Sandbox Code Playgroud)