Gradle 不必要地运行任务

Gradle 不必要地运行任务,gradle,Gradle,我已经编写了一个任务,使用通过用户输入选择的主类运行我的项目。当我运行gradletasks时,它会提示我选择一个主类。这是为什么?我如何预防 task run(dependsOn: "classes", type: JavaExec) { description "Executes the project using the selected main class" def selection = null def mainClasses = [] // S

我已经编写了一个任务,使用通过用户输入选择的主类运行我的项目。当我运行
gradletasks
时,它会提示我选择一个主类。这是为什么?我如何预防

task run(dependsOn: "classes", type: JavaExec) {
    description "Executes the project using the selected main class"

    def selection = null
    def mainClasses = []

    // Select the java files with main classes in
    sourceSets.main.allJava.each {
        if(it.text.contains("public static void main")) {
            def pkg = relativePath(it) - 'src/main/java/' - '.java'
            pkg = pkg.tr "/", "."

            println "${mainClasses.size()}. $pkg"
            mainClasses << pkg
        }
    }

    // Now prompt the user to choose a main class to use
    while(selection == null) {
        def input = System.console().readLine "#? "

        if(input?.isInteger()) {
            selection = input as int

            if(selection >= 0 && selection < mainClasses.size()) {
                break
            } else {
                selection = null
            }
        } else if(input?.toLowerCase() == "quit") {
            return
        }

        if(selection == null) {
            println "Unknown option."
        }
    }

    main = mainClasses[selection]
    classpath = sourceSets.main.runtimeClasspath
}
任务运行(dependsOn:“类”,类型:JavaExec){
说明“使用选定的主类执行项目”
def selection=null
def mainClasses=[]
//选择包含主类的java文件
sourceset.main.allJava.each{
if(it.text.contains(“publicstaticvoidmain”)){
def pkg=relativePath(it)-'src/main/java/'-'java'
pkg=pkg.tr/“,”
println“${mainClasses.size()}.$pkg”
mainClasses=0&&selection
Gradle有一个配置阶段和一个执行阶段。
在调用“gradle tasks”时,您的构建逻辑实际上是运行的,这是因为您的构建逻辑位于tasks configuration部分。如果要将其移动到执行阶段,应引入doFirst或doLast闭包

有关更多详细信息,请参阅或

当我添加
doLast
闭包时,用户从未得到提示,奇怪的是,当我使用
doFirst
时,用户会得到提示。