gpt4 book ai didi

java - Gradle:多项目依赖:同名任务一起执行

转载 作者:行者123 更新时间:2023-11-29 04:40:35 24 4
gpt4 key购买 nike

我的 gradle 构建中有一个多项目依赖项,但有一个功能有点妨碍我。每当我调用一个存在于两个项目中的任务名称时,它都会同时调用它们。我不喜欢这样。

我的目录结构如下:

[Root]
---->[projA]
----------->build.gradle
---->[projB]
----------->build.gradle

所以我的代码中有 projB 依赖于 projA。假设我在 projB 中运行了一个任务:

task run << {
println 'projB running'
}

而且我还在 projA 中运行了一个任务:

task run << {
println 'projA running'
}

通过调用gradle run,我会得到

:run
projB running
:projA:run
projA running

有什么方法可以防止某些任务具有这种依赖性吗?其中一些,说 clean 很好,但我更愿意将特定任务分开(不必更改命名方案)。

可以通过以下任一方式实现我想要的效果:

gradle run -x :projA:run

gradle :run

不过,我想要一个包含在构建文件中的解决方案。

谢谢!

最佳答案

projB 声明项目依赖于 projA 这一事实与您所看到的行为无关。如果您从多项目构建的根项目执行任务,Gradle 将尝试在其任何 子项目中使用请求的名称查找任务并执行它。此功能称为 task execution matching .鉴于此默认行为,当从根项目执行 gradle run 时,Gradle 无法知道您指的是哪个 run 任务。我建议您按照我之前的评论中提到的那样,在命令行上定义要执行的内容。

如果你真的想在你的构建脚本中添加逻辑,那么你可以用下面的代码来实现它:

def taskRequests = gradle.startParameter.taskRequests
def runTaskRequest = taskRequests.find { it.args.contains('run') }

if (runTaskRequest) {
gradle.startParameter.excludedTaskNames = [':projA:run']
}

如果您执行命令 gradle run,所提供的代码将阻止执行子项目 projArun 任务。请记住,如果您导航到 projA 子目录并运行相同的命令,它也会排除 :projA:run。如果您仍希望能够从子目录执行 run 任务,则必须构建额外的逻辑。

关于java - Gradle:多项目依赖:同名任务一起执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39357616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com