无法使Gradle签名插件与子项目一起工作

无法使Gradle签名插件与子项目一起工作,gradle,signing,Gradle,Signing,对于单个项目,它非常有效。但对于子项目,它要么签名但不发布,要么发布但不签名 Gradle org似乎没有任何官方文档显示签名子项目的示例,他们似乎也没有使用签名插件本身(这是一个遗憾,因为Gradle源代码有100多个子项目,这将是一个非常好的示例) 问题的要点是,尝试在所有项目或子项目中添加签名任务会导致无法添加任务“signArchives”,因为具有该名称的任务已经存在。,但任何尝试通过其他方式进行签名的尝试(例如,将其移动到包含文件,并从每个项目的该文件上调用apply from)删除

对于单个项目,它非常有效。但对于子项目,它要么签名但不发布,要么发布但不签名

Gradle org似乎没有任何官方文档显示签名子项目的示例,他们似乎也没有使用签名插件本身(这是一个遗憾,因为Gradle源代码有100多个子项目,这将是一个非常好的示例)

问题的要点是,尝试在所有项目或子项目中添加签名任务会导致
无法添加任务“signArchives”,因为具有该名称的任务已经存在。
,但任何尝试通过其他方式进行签名的尝试(例如,将其移动到包含文件,并从每个项目的该文件上调用apply from)删除签名/发布任务

其他插件/任务,例如jacoco,在应用于所有项目或子项目时工作良好。这似乎是特定于签名插件的。它甚至可能是签名插件中的一个bug(它不应该与应用它的项目一起应用吗?)。我愿意接受一个有效的工作环境

谷歌搜索答案只找到了另一个遇到这个问题的人,这就是我得到包含文件解决方案的原因,只是它删除了发布任务


我尝试过的东西在github,gradle问题13419中有详细的记录。到目前为止还没有回应。

下面是working build.xml

allprojects {
    apply plugin:  'java'
    apply plugin:  'maven-publish'
    apply plugin:  'signing'

    repositories {
        mavenCentral()
    }

    dependencies {
        testImplementation group: 'junit', name: 'junit', version: '4.12'
    }

    signing {
        sign configurations.archives
    }

    build.dependsOn signArchives
}

group 'com.tssp'
version '1.0-SNAPSHOT'

dependencies {
    implementation(project(':sub1'))
    implementation(project(':sub2'))
}

格雷德尔酒店

rootProject.name = 'tSignSubPrj'
include 'sub1'
include 'sub2'
显示子项目存档的运行日志

14:30:39: Executing task 'build --dry-run'...

:sub1:compileJava SKIPPED
:sub1:processResources SKIPPED
:sub1:classes SKIPPED
:sub1:jar SKIPPED
:sub2:compileJava SKIPPED
:sub2:processResources SKIPPED
:sub2:classes SKIPPED
:sub2:jar SKIPPED
:compileJava SKIPPED
:processResources SKIPPED
:classes SKIPPED
:jar SKIPPED
:signArchives SKIPPED
:assemble SKIPPED
:compileTestJava SKIPPED
:processTestResources SKIPPED
:testClasses SKIPPED
:test SKIPPED
:check SKIPPED
:build SKIPPED
:sub1:signArchives SKIPPED
:sub1:assemble SKIPPED
:sub1:compileTestJava SKIPPED
:sub1:processTestResources SKIPPED
:sub1:testClasses SKIPPED
:sub1:test SKIPPED
:sub1:check SKIPPED
:sub1:build SKIPPED
:sub2:signArchives SKIPPED
:sub2:assemble SKIPPED
:sub2:compileTestJava SKIPPED
:sub2:processTestResources SKIPPED
:sub2:testClasses SKIPPED
:sub2:test SKIPPED
:sub2:check SKIPPED
:sub2:build SKIPPED

BUILD SUCCESSFUL in 59ms
14:30:39: Task execution finished 'build --dry-run'.

这是最疯狂的事情。受访者说它有效,但在我们的项目中肯定不起作用,所以我开始将我们的项目归结为一个例子,当尝试这样做时,问题没有再次出现。不知道为什么它以前不起作用,但不管怎样,它现在起作用了。

它对我来说很好。我尝试了一个多项目构建,其中发布和签名都配置在
allprojects
块中。Gradle为所有工件创建了签名和出版物。所以我想你只是在某个地方有一个错误的配置。也许你可以展示你的构建文件?