跳过gradle中的任务,但仅当该任务存在时

跳过gradle中的任务,但仅当该任务存在时,gradle,Gradle,我有一个复杂的多个子项目gradle项目,里面有一个kotlin多平台和一个fex自定义gradle插件 我的问题是,当我想通过跳过一些任务(主要是测试)来运行构建时,并不是所有的项目都有相同的测试任务名称:对于某些项目,它的名称是jsTest,对于其他节点jsTest,对于其他jvmTest 因此,当我调用gradlebuild-xjstest-xnodejstest时,我出现了错误,因为有时要跳过的一些任务不存在 如果任务不存在,我如何跳过它并忽略它?您可以修改您的Gradle文件以执行以下

我有一个复杂的多个子项目gradle项目,里面有一个kotlin多平台和一个fex自定义gradle插件

我的问题是,当我想通过跳过一些任务(主要是测试)来运行构建时,并不是所有的项目都有相同的测试任务名称:对于某些项目,它的名称是jsTest,对于其他节点jsTest,对于其他jvmTest

因此,当我调用
gradlebuild-xjstest-xnodejstest
时,我出现了错误,因为有时要跳过的一些任务不存在


如果任务不存在,我如何跳过它并忽略它?

您可以修改您的Gradle文件以执行以下操作(Kotlin DSL):


否则,您将需要通过执行
/gradlew myTask anotherTask anotherOne and notherone
或创建一个
依赖于您想要的所有任务的任务,将您的任务聚合到您想要的内容。

而不是让您的测试任务直接依赖于构建,您可以在中间创建通用测试任务
task testType
——构建触发器
task testType
,然后它触发
jsTest
或您在该模块中创建的任何相关测试任务。
现在您可以安全地运行
gradlebuild-xtesttype

例如(在.gradle文件中):


对其余的测试任务文件执行相同的操作,如果您希望解决方案更干净,您还可以创建
任务testType
globaly。

您不能只运行您需要的任务,例如
gradle assembly
?如果不是,我建议添加自定义的“聚合”任务,这些任务取决于要运行的任务。不,是任务依赖于其他任务:例如,在每个构建时启动测试任务
tasks.named("build") {
    dependsOn.removeIf { it.toString().contains("flakyTest") }
}
task jsTest { ... }
task testType { dependsOn jsTest }
build.finalizedBy(testType)