java - Gradle 覆盖默认检查任务

标签 java unit-testing gradle build

我已经将我的 sourceSets 定义为

sourceSets {
    // Configuring SourceSets for all connector source files.
    main {
        java {
            srcDirs = ['src']
        }
    }
    test {
        // integrationTests
    }
    unitTests {
        //unitTests
    }
}

test {
   // integrationTests
}

task('unitTest', type: Test) {
  //unitTests
}

当我启动 ./gradlew build 时,它的 check 任务基本上调用了 test 目标。

我能否覆盖默认的 gradle build 任务的“检查”机制以在此处调用 unitTest 而不是 test

最佳答案

首先,请考虑只使用任务test用于单元测试并使用另一个源集进行集成测试。 Gradle 及其插件遵循一种称为约定优于配置 的方法,Java 插件的约定是使用任务test。用于单元测试。


要真正回答您的问题,您可以使用 getDependsOn() 访问和修改每个任务的依赖关系。和 setDependsOn​(Iterable<?>) ,所以您的问题的简单解决方案可能是以下代码:

check {
    dependsOn.clear()
    dependsOn unitTest
}

这会从任务 check 中删除所有任务依赖项然后添加对任务的依赖 unitTest .但是,这可能会导致新的问题,因为其他插件可能会自动为 check 注册任务依赖项。也将被删除。

上述代码的一个明显改进是删除对 test 的依赖。任务而不是所有任务依赖项。可悲的是,这并不像人们想象的那么简单。您可能已经注意到方法 getDependsOn()返回 Set<Object>而不是 Set<Task> .为了方便起见,任务依赖性不仅可以使用任务来表示,还可以通过传递稍后将解析为任务的其他对象(例如,包含任务名称的字符串)来表示。 current version of the Java plugin使用 Provider<Task>注册任务之间的依赖关系 check和任务 test .只是删除对任务的依赖 test ,您需要遍历 dependsOn 中的所有依赖项并找到类型为 Provider 的那个返回任务 test通过其 get() 方法。然后你可以删除那个 Provider来自 dependsOn .

如您所见,一旦任务依赖项被注册,就可以删除它们,但这并不容易,因此您可能应该遵循约定并使用任务 test。用于单元测试。

关于java - Gradle 覆盖默认检查任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65181167/

相关文章:

java - Grails:从是否发送邮件的mailService获得返回

java - 绘制矩形或椭圆时,Path.Direction.CCW 和 CW 有什么区别?

java - 将 Serilizable 转换为 HashMap 的派生

java - onMenuItemClick 未调用

c# - ASP.NET Core 单元测试在测试 Controller 问题响应时抛出 Null Exception

python - 如何用doctest测试 float 结果?

asp.net - 您将如何交换连接字符串来访问测试数据库以进行单元测试?

Gradle 在根模块之外的另一个项目中包含一个多模块子模块

gradle - Gradle和SLF4J/登录

gradle - Gradle不能使用ant可选(例如脚本任务中的ScriptRunner)