问题描述
我正在正确设置 Gradle 脚本,以便将 .aar
直接发布到 Maven Central(使用 JFrog sunsetting Bintray,有关发布到 Bintray 的大量资源不再相关的)。先决条件之一是将所有工件(aar、sources jar、java-doc jar、pom.xml)与相应的 GPG 签名文件(例如 sources.jar.asc
)一起上传。
遵循这两个指南(非常相似),我基本上做到了:
- https://medium.com/@nmauti/sign-and-publish-on-maven-central-a-project-with-the-new-maven-publish-gradle-plugin-22a72a4bfd4b
- https://www.albertgao.xyz/2018/01/18/how-to-publish-artifact-to-maven-central-via-gradle/
然而,尽管使用 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!... :-/
}
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'
我正在寻找一种稳定、万无一失的解决方案,可以端到端地解决这个问题,没有片状错误。
解决方法
作为一种解决方案,我发现将生成 .aar
的 task 注册为项目存档 - 而不是注册文件本身,就可以解决问题(很像 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"]
}
}
}
}
}