发布GitHub程序包返回422错误

问题描述

我在一个Android项目中使用GitHub软件包已有一段时间了,没有任何问题。 现在,当我尝试发布新程序包时,出现错误:

无法从服务器:无法处理的实体PUT收到状态代码422

为确保没有更改任何内容,我回到了git-tag,几天前我成功地从git-tag成功地发布了一个软件包,我只更改了版本以生成另一个软件包。我收到同样的错误。

我添加了日志,我可以看到令牌已正确读取,所有值(GROUP,VERSION等)似乎都是正确的,并且我要发布的文件位于正确的文件夹中。 我还尝试创建和使用新令牌,以防旧令牌出了点问题,但无济于事。

如果我发布了太多文件,GitHub是否会因为该错误而拒绝发布?在这种情况下,我没有找到有关该错误的任何文档。

编辑

我还试图创建一个新项目并将其发布到该项目中,以防在最初的项目中出现问题,但是它也不起作用。

我尝试直接使用CURL放置文件,这有效,这意味着令牌正确,问题不在于已发布软件包的总大小限制:

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回购发布。

END EDIT

在这里,我的配置已经使用了很长时间,并且仅遵循文档+为调查此问题而添加的日志。

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是通过env变量设置的。

archivesBaseName在模块的build.gradle中设置

解决方法

您可以尝试使用较低的大小写您的工件ID。 我遇到了同样的问题,降低了它的工作性。

参考:https://github.community/t/gradle-maven-deploy-failing-with-422-unprocessable-entity/137299/3

我相信这是与SO一起发布问题的好地方:)

希望对您有帮助!

,

就我而言,当工件的名称为 apiserviceserde 时,它被阻止了。例如。这行得通 <artifactId>database-ervice</artifactId> 这没有没有数据库服务

编辑: 使用 Postman 执行 put 请求时,我得到了

Package "io.XXX.mydomain.xyz-service" is already associated with another repository. 意识到该软件包之前已部署在另一个存储库中。

maven-deployer-plugin 在报告 PUT 响应的错误消息方面非常糟糕,因此不得不使用 mintm 查找 url 并使用 Postman 找出消息。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...