如何使用 Gradle 推送到 Github 包注册表

Posted

技术标签:

【中文标题】如何使用 Gradle 推送到 Github 包注册表【英文标题】:How to push to Github package registry with Gradle 【发布时间】:2019-12-10 21:23:54 【问题描述】:

尝试将 Gradle 项目推送到 Github 包注册表,但未按预期工作。

为 Gradle 使用 io.freefair.github.package-registry-maven-publish 插件。

build.gradle 中使用发布所需的数据配置 GitHub - 代码如下。并运行发布任务publishAllPublicationsToGutHub。没有出现错误,但我在 GitHub 包注册表中看不到我的包。

github 
    slug
    username = "myGitUserName"
    token = "myTokenWithRightAccess"
    tag = "HEAD"
    travis = true

期待一些示例,说明如何使用 Gradle 发布到 Github 包注册表或发布时我做错了什么

【问题讨论】:

【参考方案1】:

新答案

GitHub 已发布官方指南:Configuring Gradle for use with GitHub Packages。


旧答案

好像是插件is not very stable yet。看看the repository I've created 已经设置好了一切。我设法使用该插件here 发布了一些包。

由于maven-metadata.xml 的一些问题,即使发布了包,Gradle 也会显示任务失败:

> Task :publishMainPublicationToGitHub madhead Maven PackagesRepository FAILED
Could not transfer metadata so57323260:test/maven-metadata.xml from/to remote (https://maven.pkg.github.com/madhead): Could not get resource 'so57323260/test/maven-metadata.xml'

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':publishMainPublicationToGitHub madhead Maven PackagesRepository'.
> Failed to publish publication 'main' to repository 'GitHub madhead Maven Packages'
   > Could not GET 'https://maven.pkg.github.com/madhead/so57323260/test/maven-metadata.xml'. Received status code 422 from server: Unprocessable Entity

不过没关系,说不定哪天就修好了。

我注意到,由于 Maven 发布的 groupId 不正确,这些包可能不会发布(请参阅 linked issue)。现在看来它应该等于 Github 的项目名称。所以,就我而言,我不得不将so57323260 用作groupId 用于madhead/so57323260 项目。这不是包在 Maven 中通常的工作方式,所以这可能是你的问题。

【讨论】:

谢谢你的朋友,它对我有用,和你一样的错误,在“3.8.2”版本上它不起作用,有一个不同的错误。预计我只需要提供“GitHub”块即可发布,但我需要添加“发布”块和“maven-publish”插件才能使其工作。 还有一个问题,如何通过 Gradle 访问 Github 包注册表作为依赖项,再次感谢您的回答? @DOIT,开,所以这是一个good practice 来提出新问题......新问题。所以,我已经为你问了一个here(并回复了!)。看看吧。 看起来这个功能太beta了。我能够使用版本 x.y.z 发布。然后我无法发布下一个版本。然后,当我完全删除版本时,我就可以发布了。然后我根本无法发布了:) 我们的问题是publications.gpr 块中的groupIdversion【参考方案2】:

我能够使用 maven-publish 插件发布到 Github 包注册表。它现在似乎工作得很好。

我的 build.gradle 文件如下所示:

buildscript 
    repositories 
        mavenCentral()
    


plugins 
    id 'java'
    id 'maven-publish'


group 'com.company.project'
archivesBaseName = 'library-name'
version '0.1.0'

repositories 
    mavenCentral()


dependencies 
  // java dependencies


publishing 
    repositories 
        maven 
            name = "Github"
            url = uri("https://maven.pkg.github.com/<OWNER>/<REPO>")
            credentials 
                username = findProperty("github.username")
                password = findProperty("github.token")
            
        
    
    publications 
        register("jar", MavenPublication) 
            from(components["java"])
            pom 
                url.set("https://github.com/<OWNER>/<REPO>.git")
            
        
    

将您的 github 用户名和令牌放入 gradle.properties 文件中。

【讨论】:

您不应将 GitHub 令牌放入存储库中的 gradle.properties。令牌是秘密,不得向其他用途公开。 你应该把 gradle.properties 文件放在 ~/.gradle/gradle.properties【参考方案3】:

还值得设置一个 github 操作以发布到 github 包 repo:


name: Publish package to GitHub Packages
on:
  release:
    types: [created]
jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-java@v1
        with:
          java-version: 1.8
      - name: Publish package
        run: gradle -Pversion=$ github.event.release.tag_name  build publish
        env:
          GITHUB_TOKEN: $ secrets.GITHUB_TOKEN 

每次我们使用该标签作为版本创建发布标签时,这都会发布一个包。

【讨论】:

【参考方案4】:

GitHub 已经发布了如何在 GitHub 打包器中使用 Gradle 的官方文档

https://help.github.com/en/github/managing-packages-with-github-packages/configuring-gradle-for-use-with-github-packages#authenticating-to-github-packages

【讨论】:

【参考方案5】:

正确填写这些属性

    所有者 存储库 用户名(或 gradle 属性 gpr.user) 密码(或 gradle 属性 gpr.key

@查看演示

    https://github.com/youngerier/packagesdemo

    https://help.github.com/en/github/managing-packages-with-github-packages/configuring-gradle-for-use-with-github-packages

【讨论】:

以上是关于如何使用 Gradle 推送到 Github 包注册表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 GITHUB_TOKEN 密钥和 Maven Jib 插件将图像推送到 GitHub 包?

Gradle打包后自动推送到FTP服务器

如何通过 GitKraken 将标签推送到 Github

如何推送到远程仓库

如何使用 GitHub API v3 创建提交并推送到 repo?

如何使用git命令把代码推送到github