gradle重写默认的检查任务

xt0899hw  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(591)

我已将我的源集定义为

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 ?

qltillow

qltillow1#

首先,请考虑使用任务 test 对于单元测试和使用另一个源集进行集成测试。gradle及其插件遵循一种称为convention over configuration的方法,java插件的约定是使用任务 test 用于单元测试。
要真正回答您的问题,您可以使用访问和修改每个任务的依赖项 getDependsOn() 以及 setDependsOn​(Iterable<?>) ,因此您的问题的简单解决方案可以是以下代码:

check {
    dependsOn.clear()
    dependsOn unitTest
}

这将从任务中删除所有任务依赖项 check 然后添加对任务的依赖关系 unitTest . 但是,这可能会导致新的问题,因为其他插件可能会自动注册的任务依赖项 check 这也将被删除。
对上面代码的一个明显的改进就是删除对 test 而不是所有任务依赖项。可悲的是,这并不像人们想象的那么简单。你可能已经注意到 getDependsOn() 返回一个 Set<Object> 而不是一个 Set<Task> . 为了方便起见,任务依赖性不仅可以使用任务来表示,还可以通过传递稍后将解析为任务的其他对象(例如,包含任务名称的字符串)来表示。当前版本的java插件使用 Provider<Task> 注册任务之间的依赖关系 check 任务呢 test . 删除对任务的依赖 test ,则需要迭代中的所有依赖项 dependsOn 找一个有这种类型的 Provider 返回任务 test 通过its get() 方法。你就可以把它去掉 ProviderdependsOn .
正如您所看到的,一旦任务依赖项被注册,就可以删除它们,但是这并不是那么容易,所以您应该遵循约定并使用任务 test 用于单元测试。

相关问题