gpt4 book ai didi

Gradle - 在每个任务的基础上捕获写入 out/err 的输出

转载 作者:行者123 更新时间:2023-12-04 04:10:35 25 4
gpt4 key购买 nike

我正在 try catch 每个任务在执行时写入的输出。下面的代码在使用 --max-workers 1 运行 Gradle 时按预期工作,但是当多个任务并行运行时,下面的代码会获取从同时运行的其他任务写入的输出。

API 文档说明了有关 Task 上的“getLogging”方法的以下内容。根据它所说的,我判断它应该支持从单个任务捕获输出,而不管同时运行的任何其他任务。

getLogging() Returns the LoggingManager which can be used to control the logging level and standard output/error capture for this task. https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html


graph.allTasks.forEach { Task task ->
task.ext.capturedOutput = [ ]

def listener = { task.capturedOutput << it } as StandardOutputListener

task.logging.addStandardErrorListener(listener)
task.logging.addStandardOutputListener(listener)

task.doLast {
task.logging.removeStandardOutputListener(listener)
task.logging.removeStandardErrorListener(listener)
}
}

我是否搞砸了上面代码中的某些内容,还是应该将其报告为错误?

最佳答案

看起来每个LoggingManager实例共享一个 OutputLevelRenderer ,这就是您的听众最终会加入的内容。这确实让我想知道为什么您没有收到重复的消息,因为您一遍又一遍地将相同的监听器附加到相同的渲染器。但似乎魔法在 BroadcastDispatch ,它将监听器保留在映射中,由监听器对象本身键入。所以你不能有重复的听众。

请注意,要保持这一点,每个监听器的哈希码必须相同,这似乎令人惊讶。无论如何,也许这是按预期工作的,也许不是。弄清楚 Gradle 是否应该支持每个任务的监听器,这当然是值得讨论的问题。或者在开发邮件列表中提出它。

关于Gradle - 在每个任务的基础上捕获写入 out/err 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31523166/

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