如何 GPG 签署 aar 并将其直接发布到 Maven Central?

问题描述

我正在正确设置 Gradle 脚本,以便将 .aar 直接发布到 Maven Central(使用 JFrog sunsetting Bintray,有关发布到 Bintray 的大量资源不再相关的)。先决条件之一是将所有工件(aar、sources jar、java-doc jar、pom.xml)与相应的 GPG 签名文件(例如 sources.jar.asc)一起上传

遵循这两个指南(非常相似),我基本上做到了:

然而,尽管使用 Gradle 很好地描述了解决方案,但两个指南似乎都侧重于普通的 .jar 而不是 .aar。特别是,我不确定应该将什么设置为项目存档以便放入自动签名+发布列表,如建议的那样:

project.artifacts {
    archives sourceJar // Ok,I have a sourceJar task - will be signed and uploaded
    archives javadocJar // I use Dokka,but got that to work by registering my dokka task
    archives jar // What's "jar"? this doesn't help much!... :-/
}

我什至尝试明确注册输出 .aar 文件

publications {
    android.libraryVariants.all { variant ->
        if (shouldPublishVariant(variant)) {
          // ...
          // ...

          variant.outputs.forEach { output ->
              project.artifacts {
                  archives output.outputFile // The full path of the .aar to publish!
              }
          }
        }
    }
}

但这似乎导致了这个片状错误

Execution Failed for task ':detox:publishMavenFullReleaseAarPublicationToMavenRepository'.
> Failed to publish publication 'mavenFullReleaseAar' to repository 'maven'
   > Invalid publication 'mavenFullReleaseAar': artifact file does not exist: '.../build/outputs/aar/library-full-release.aar.asc'

我正在寻找一种稳定、万无一失的解决方案,可以端到端地解决这个问题,没有片状错误

解决方法

作为一种解决方案,我发现将生成 .aartask 注册为项目存档 - 而不是注册文件本身,就可以解决问题(很像 done对于源代码和 javadoc jar):

publications {
    android.libraryVariants.all { variant ->
        if (shouldPublishVariant(variant)) {
          // ...
          // ...

          variant.outputs.forEach { output ->
              project.artifacts {
                  // For example: bundleProdReleaseAar is the task that generates library-prod-release.aar
                  archives project.tasks["bundle${variant.name.capitalize()}Aar"]
              }
          }
        }
    }
}