Gradle覆盖默认检查任务

我已经将我的 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()返回 aSet<Object>而不是 a Set<Task>。为方便起见,任务依赖性不仅可以使用任务来表达,还可以通过传递稍后将解析为任务的其他对象(例如,包含任务名称的字符串)来表达。该Java插件的最新版本采用的是Provider<Task>注册任务之间的依赖关系check和任务test。要移除对任务的依赖test,您需要遍历所有依赖dependsOn并找到Provider返回任务类型的依赖。test通过其get()方法。然后您可以将其ProviderdependsOn.

如您所见,可以在注册后删除任务依赖项,但这并不容易,因此您可能应该遵循约定并将任务test用于单元测试。


以上是Gradle覆盖默认检查任务的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>