首页 > 解决方案 > Gradle - 在自定义任务中跳过测试

问题描述

从命令运行 gradle 构建时,我可以像这样跳过测试:

./gradlew build -x test

我有一个自定义任务,可以清理、构建和发布到 Maven 本地定义,如下所示:

task releaseLocal(type: GradleBuild) {
    tasks = ['clean', 'build', 'publishToMavenLocal']
}

当我调用它时,以下任务都不会跳过测试:

./gradlew releaseLocal
./gradlew releaseLocal -x test

我可以在任务中添加什么来跳过测试?

标签: gradle

解决方案


类型的任务GradleBuild提供了一个名为 的属性startParameter。此属性是类型StartParameter,可用于传递配置,否则通过命令行参数传递。使用该选项传递的任务名称-x存储在excludedTaskNames属性中,因此您可以使用以下代码test从构建中排除命名的任务:

task releaseLocal(type: GradleBuild) {
    tasks = ['clean', 'build', 'publishToMavenLocal']
    startParameter.excludedTaskNames = ['test']
}

但是,这将排除test每次调用的任务releaseLocal,因此您可以尝试使用以下代码从当前构建传递命令行参数:

task releaseLocal(type: GradleBuild) {
    startParameter = gradle.startParameter.newInstance()
    tasks = ['clean', 'build', 'publishToMavenLocal']
}

这应该从您当前的构建中复制命令行参数,所以现在您应该能够通过调用跳过任何任务gradle releaseLocal -x <task>

请注意,您不能更改第二个示例中两个配置语句的顺序。在内部,属性tasksGradleBuild应用于其startParameter属性,因此您必须在覆盖属性tasks startParameter定义。


推荐阅读