gpt4 book ai didi

groovy - 为什么提取此方法在 gradle 中不起作用?

转载 作者:行者123 更新时间:2023-12-03 03:15:06 25 4
gpt4 key购买 nike

我有一个多模块项目的 gradle 构建脚本。

为了更好的可读性,我想提取一些方法,但是当我这样做时,脚本失败并出现异常:

Cannot add task ':signArchives' as a task with that name already exists.

完整的可重现示例:
有一个空目录,其中包含两个文件:

settings.gradle
include 'eins', 'zwei'

build.gradle
task wrapper(type: Wrapper) {
gradleVersion = '2.3'
}

allprojects {
apply plugin: 'signing'
}

subprojects {
signing {
sign configurations.archives
}
}

private Object signIt() {
signing {
sign configurations.archives
}
}

在该目录中执行以下命令:
gradle wrapper

gradlew tasks

结果,您将获得可用任务的列表。

将 build.gradle 文件更改为以下内容
task wrapper(type: Wrapper) {
gradleVersion = '2.3'
}

allprojects {
apply plugin: 'signing'
}

subprojects {
signIt()
}

private Object signIt() {
signing {
sign configurations.archives
}
}

再次执行:
gradlew tasks

现在你(或至少我)得到:
> Cannot add task ':signArchives' as a task with that name already exists.

最佳答案

重构中丢失了子项目上下文。

如果添加 println project.name进入签名闭包,您可以看到您在第一个变体中对每个子项目进行了一次签名,而在第二个变体中对根项目进行了两次签名。

您可以通过例如将子项目作为参数传递给签名方法来修复它:

subprojects {
signIt(project)
}

private Object signIt(project) {
project.with {
signing {
sign configurations.archives
}
}
}

关于groovy - 为什么提取此方法在 gradle 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28923962/

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