为什么提取此方法在 gradle 中不起作用?
Why does extracting this method not work in gradle?
我有 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
}
}
}
我有 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
}
}
}