【发布时间】:2021-01-27 00:27:05
【问题描述】:
我在一个 Android 项目中使用 GitHub 包已经有一段时间了,没有任何问题。 现在,当我尝试发布一个新包时,我得到了错误:
无法 PUT 收到来自服务器的状态代码 422:无法处理的实体
为了确保我没有更改任何内容,我回到了几天前成功发布包的 git-tag,我只更改了版本以生成不同的包。我得到同样的错误。
我添加了日志,我可以看到令牌已正确读取,所有值(GROUP、VERSION 等)似乎都正确,并且我尝试发布的文件位于正确的文件夹中。 我还尝试创建和使用新令牌,以防旧令牌出现问题但没有帮助。
如果我发布了太多文件,GitHub 会拒绝发布该错误吗?我没有找到有关您在这种情况下遇到的错误的任何文档。
编辑
我还尝试创建一个新项目并发布到该项目,以防万一最初的项目出现问题,但它也不起作用。
我尝试使用 CURL 直接 PUT 一个文件,这意味着令牌是正确的,问题不在于已发布包的总大小限制:
curl -X PUT \
"https://maven.pkg.github.com/companyname/repositoryname/com/companyname/artifactid/v2.1.520/artifactid-v2.1.520.aar" \
-H "Authorization: token mytoken” \
--upload-file “/full/path/to/file.aar" -vvv
当然,这不是解决方案,因为我需要使用 pom 等发布 maven repo。
结束编辑
这里我的配置已经工作了很长时间,并且只是按照文档+我添加的用于调查问题的日志。
在build.gradle:
allprojects {
repositories {
google()
jcenter()
maven {
name = "GitHubPackages"
url = uri("https://maven.pkg.github.com/companyname/companyname-android-sdk")
credentials {
username = project.findProperty("gpr.user") ?: System.getenv("GitHubPackagesUsername")
password = project.findProperty("gpr.key") ?: System.getenv("GitHubPackagesToken")
println "GitHubPackages build.gradle\n\tusername=$username\n\ttoken=$password"
}
}
}
}
在publish-artifacts.gradle:
publishing {
repositories {
maven {
name = "GitHubPackages"
url = uri("https://maven.pkg.github.com/companyname/companyname-android-sdk")
credentials {
username = project.findProperty("gpr.user") ?: System.getenv("GitHubPackagesUsername")
password = project.findProperty("gpr.key") ?: System.getenv("GitHubPackagesToken")
println "GitHubPackages Publish Artifact:\n\tusername=$username\n\ttoken=$password"
}
}
}
publications {
gpr(MavenPublication) {
println "\tskSdkVersion=$SK_SDK_VERSION\n\tarchivesBaseName=$archivesBaseName\n\tGROUP=$GROUP\n\tdesciption=$POM_DESCRIPTION"
println "artifact from $buildDir/outputs/aar/$archivesBaseName-${VARIANT_SUFFIX}.aar"
groupId SK_GROUP
version SK_SDK_VERSION
artifactId archivesBaseName
artifact "$buildDir/outputs/aar/$archivesBaseName-${VARIANT_SUFFIX}.aar"
description POM_DESCRIPTION
pom.packaging POM_PACKAGING
pom.withXml {
def dependenciesNode = asNode().appendNode('dependencies')
configurations.implementation.allDependencies.each {
println "dependency=$it"
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', it.group)
dependencyNode.appendNode('artifactId', it.name)
dependencyNode.appendNode('version', it.version)
}
}
}
}
}
在gradle.properties 文件中:
POM_NAME=PackageName
POM_PACKAGING=aar
GROUP=com.companyname
POM_DESCRIPTION=CompanyName SDK Core library
VARIANT_SUFFIX 是从环境变量中设置的。
archivesBaseName 设置在模块的build.gradle
【问题讨论】:
-
gpr块有什么用? -
@IgorGanapolsky 它告诉 Gradle 需要发布的工件,它们的 pom 文件声明了依赖关系等。
gpr只是一个名称。我有两个:gpr和gprStaging -
您在哪里声明
gpr和gprStaging名称? gradle 如何知道如何解释它们。 -
@IgorGanapolsky 你用那行声明它。这是隐藏你实际在做什么的(可怕的?)时髦的方式。在 kotlin 中,它将是
create<MavenPublication>("gpr") {。请查收:docs.gradle.org/current/userguide/publishing_maven.html
标签: android gradle github-package-registry