【问题标题】:Unable to get Gradle signing plugin to work with subprojects无法让 Gradle 签名插件与子项目一起使用
【发布时间】:2020-06-18 16:16:31
【问题描述】:

对于单个项目,效果很好。但是对于子项目,它要么签名但不发布,要么发布但不签名。

Gradle org 似乎没有任何官方文档显示签名子项目的示例,而且他们似乎自己也没有使用签名插件(这很遗憾,因为 Gradle 源代码有超过 100子项目,这是一个很好的例子)。

问题的要点是尝试在所有项目或子项目中添加签名任务会导致Cannot add task 'signArchives' as a task with that name already exists.,但任何通过其他方式进行签名的尝试(例如,通过将其移动到包含文件并调用apply -from 来自每个项目的该文件)删除签名/发布任务。

其他插件/任务,例如 jacoco,在所有项目或子项目中都可以正常工作。这似乎特定于签名插件。它甚至可能是签名插件中的一个错误(它不应该每个名称空间都适用于它所应用的项目吗?)。我会接受一个可行的解决方法。

搜索答案只发现另一个遇到此问题的人,这就是我得到包含文件解决方案的地方,除了它删除了发布任务。

我尝试过的事情在 github 中有详细记录,gradle issues 13419。到目前为止还没有任何回应。

【问题讨论】:

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

标签: gradle signing


【解决方案1】:

下面是工作 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'))
}

settings.gradle

rootProject.name = 'tSignSubPrj'
include 'sub1'
include 'sub2'

运行日志显示子项目的 signArchives

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'.

【讨论】:

    【解决方案2】:

    这是最疯狂的事情。受访者说它有效,而且在我们的项目中肯定没有奏效,所以我着手将我们的项目归结为一个示例,当尝试这样做时,问题并没有再次出现。不知道为什么它以前不起作用,但无论如何,它现在起作用了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-19
      • 2017-03-21
      • 1970-01-01
      • 2016-04-25
      • 2018-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多