【问题标题】:Custom Gradle task to build all projects without testing?自定义 Gradle 任务无需测试即可构建所有项目?
【发布时间】:2023-03-10 03:12:01
【问题描述】:

我知道我可以执行“gradle build -x test”,但是有没有办法创建一个自定义 Gradle 任务,比如 buildNoTests,它将构建我的所有项目,但会完全忽略测试(不要编译/运行它们)?

我读到“组装”任务是不够的,因为它可能会错过其他不是测试但包含在“构建”任务中的任务。

【问题讨论】:

    标签: testing gradle build.gradle gradlew


    【解决方案1】:

    把这个放到根build.gradle

    allprojects {
        afterEvaluate {
            def buildTask = tasks.findByPath('build')
            if (buildTask) {
               task buildNoTests {
                   dependsOn buildTask
               }
               gradle.taskGraph.whenReady { TaskExecutionGraph graph ->
                   if (graph.hasTask(buildNoTests)) {
                       def skipNames = ['test', 'compileTestJava', 'processTestResources', 'testClasses'] as Set
                       Collection<Task> testTasks = graph.allTasks.findAll { skipNames.contains(it.name) }
                       testTasks.each { it.enabled = false }
                   }
               }
           }
        }
    }
    

    【讨论】:

    • 我尝试将它放入我的根 gradle.build 文件中,但它什么也没做。放入根 gradle.build 文件时是否应该有所不同?这是 Gradle 输出的截图(我之前清理过):i.imgur.com/w8WEwMX.png
    • 我觉得不错!一切都是最新的,测试被跳过。如果您希望它从头开始实际执行构建,请尝试gradle clean buildNoTests
    • 刚刚尝试过 - 它确实清理了我的特定项目,但之后没有构建它们,也许是我的 gradle 配置有问题?:i.imgur.com/GP107KS.png
    • 我忘了提一件事:Gradle 抱怨应该删除dependsOn 之后的':',所以我做到了。第二件事,这是我执行的输出(gradle clean buildNoTests)pastebin.com/3vmANFeM 和最后一件事 - 如果我将您的代码放入内部项目的 build.gradle 之一,这个特定项目将在没有测试类的情况下构建得很好
    • 有没有办法让它适用于所有项目,而无需将它们专门插入到每个 build.gradle 文件中?将其添加到根文件下的“allProjects”不起作用。
    猜你喜欢
    • 1970-01-01
    • 2011-06-03
    • 2019-06-27
    • 1970-01-01
    • 2013-08-21
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多