任务不必要地运行

时间:2014-01-07 15:40:04

标签: gradle

我编写了一个任务,使用通过用户输入选择的主类来运行我的项目,只是在我运行gradle tasks时它提示我选择一个主类。为什么会这样,我该如何预防呢?

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
}

1 个答案:

答案 0 :(得分:1)

Gradle有一个配置阶段和一个执行阶段 在调用“gradle任务”时实际运行构建逻辑的事实是因为构建逻辑位于任务配置部分。如果要将其移至执行阶段,则应引入 doFirst doLast 关闭
有关详情或gradle build script basics

,请参阅this post