Gradle:在调用root任务时排除触发子项目任务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gradle:在调用root任务时排除触发子项目任务相关的知识,希望对你有一定的参考价值。

我有以下项目结构:

Root project 'base'
+--- Project ':server'
+--- Project ':testManager'

每个模块都有自己的artifactoryPublish任务。

当我在artifactoryPublish根目录中运行root任务时,如何排除testManager模块的base的执行?

> ./gradlew artifactoryPublish - 这不应该运行testManager:artifactoryPublish

但我需要能够为一个testmanager模块单独运行此任务:

> ./gradlewtestManager:artifactoryPublish` - 这应该在指定的模块中启动任务。

我试着将以下内容添加到settings.gradle

startParameter.excludedTaskNames << ':testManager:artifactoryPublish'

但在这种情况下,即使我使用模块名称运行任务,也会始终跳过该任务。

或者也许有办法检查artifactoryPublish是否仅为testManager调用,否则设置artifactoryPublish.skip标志?

提前致谢。

答案

您可以使用-x开关排除运行任务

$> gradle --dry-run artifactoryPublish
:artifactoryPublish SKIPPED
:server:artifactoryPublish SKIPPED
:testManager:artifactoryPublish SKIPPED

$> gradle --dry-run artifactoryPublish -x :testManager:artifactoryPublish
:artifactoryPublish SKIPPED
:server:artifactoryPublish SKIPPED
另一答案

适合我的情况的解决方案是将以下内容添加到testManager build.gradle:

artifactoryPublish.onlyIf { 
    ext.has("publishTestFiles") 
}

仅当需要启动此模块的任务时,才允许使用其他标志。

以上是关于Gradle:在调用root任务时排除触发子项目任务的主要内容,如果未能解决你的问题,请参考以下文章

1.Gradle基础介绍

Gradle命令行操作

在 gradle 中排除声纳类

Android Gradle - 仅针对特定任务过滤掉变体

从 springBoots `bootJar` gradle 任务中排除特定依赖项

使用 Gradle 时如何排除传递依赖项的所有实例?