gradle - 任务不必要地运行

标签 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
}

最佳答案

Gradle具有配置阶段和执行阶段。
您的构建逻辑实际上是在调用“渐变任务”时运行的,这是因为您的构建逻辑位于“任务配置”部分中。如果要将其移至执行阶段,则应引入doFirst或doLast闭包
有关更多详细信息,请参见gradle build script basicsthis post

关于gradle - 任务不必要地运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20975743/

相关文章:

具有相应 ABI 架构的 Android APK Artifact 名称

postgresql - gradle脚本类路径仅包含脚本类

gradle - 为什么我的 Kotlin Gradle 构建退出代码为 137?

android - 将 FindBugs 更新到 3.0.1 后编译 Android 项目时出错

gradle - Gradle Native Artifacts插件应用失败

android - 我无法使用phonegap执行我的应用程序

gradle - gradle 配置是否合并或覆盖?

java - Spring Boot 应用程序本地构建通过,但由于测试在 Jenkins 中失败

android - Phonegap——无遥测错误

android - 在 Android Studio 中的所有模块的顶层构建文件中设置 proguard