【问题标题】:401 Unauthorized downloading a public package from GitHub Packages using Gradle401 Unauthorized 从 GitHub Packages 使用 Gradle 下载公共包
【发布时间】:2020-06-09 13:00:57
【问题描述】:

我是公共 GitHub 存储库的维护者。我已经设置了 GitHub Actions 来构建发布到 GitHub Packages。您可以在此处看到包已创建:

https://github.com/paulschwarz/spring-dotenv/packages/135114

我注意到的第一件事是 GitHub 只提供了一个 Maven 安装 sn-p。我使用此代码将依赖项添加到另一个项目,它似乎可以工作。

现在我想将此包导入 Gradle 项目。我加了

dependencies {
  implementation ('me.paulschwarz:spring-dotenv:0.0.3')
}

gradle 告诉我

Could not find me.paulschwarz:spring-dotenv:0.0.3.
     Searched in the following locations:
       - https://jcenter.bintray.com/me/paulschwarz/spring-dotenv/0.0.3/spring-dotenv-0.0.3.pom
       - https://repo.maven.apache.org/maven2/me/paulschwarz/spring-dotenv/0.0.3/spring-dotenv-0.0.3.pom

这已经很奇怪了,因为我的 Maven 项目似乎没有解决依赖关系的问题。我必须说我很好奇它是如何工作的? GitHub Packages 肯定没有与 JCenter 或 Maven Central 集成?

不管怎样,下一步,添加存储库

repositories {
    jcenter()
    mavenCentral()
    maven { url = uri('https://maven.pkg.github.com/paulschwarz/spring-dotenv') }
}

此时,Gradle 应该知道在哪里可以找到包。但是,我明白了

      > Could not resolve me.paulschwarz:spring-dotenv:0.0.3.
         > Could not get resource 'https://maven.pkg.github.com/paulschwarz/spring-dotenv/me/paulschwarz/spring-dotenv/0.0.3/spring-dotenv-0.0.3.pom'.
            > Could not GET 'https://maven.pkg.github.com/paulschwarz/spring-dotenv/me/paulschwarz/spring-dotenv/0.0.3/spring-dotenv-0.0.3.pom'. Received status code 401 from server: Unauthorized

这真的是未经授权的 401 吗?还是 URL 错误,它正在尝试访问授权端点?

如果是真的,那为什么?这是一个带有公共包的公共仓库。我可以直接从 GitHub 页面匿名下载包。我在 Gradle 中做错了什么?

【问题讨论】:

  • 我在 github 文档页面上读到,事实上,即使安装软件包,身份验证似乎也是必要的。这对我来说似乎有点奇怪。那么拥有公共包有什么意义呢?我不需要针对 Maven Central 进行身份验证。
  • 您好,GH 注册中心还很年轻,一些身份验证用例存在一些问题。但请记住,作为公共存储库不是 GH 注册表的目标,因为它们已经存在并且默认设置在各种包管理器(npmjs.org、Docker Hub、Maven Central ...)中。主要用例是私有包,在任何情况下您都必须对其进行一些配置。
  • 我认为使用 GitHub 包是一种让我编写的库可公开访问的简单方法。看起来我可能不得不在 maven Central 上发布,从我所阅读的内容来看,这很痛苦。

标签: maven gradle github-package-registry


【解决方案1】:

正如您所观察到的,GitHub 目前不支持未经授权的包访问(但计划在未来)as explained by one of their staff (May 27 '20)

我们的 Maven 服务目前不允许未经授权的访问。我们计划在未来提供此功能,但需要在此之前稍微改进一下服务。

对于操作,您可以将 PAT 添加到您的机密存储或使用 GITHUB_TOKEN 进行身份验证。在您的 settings.xml 中,我们建议使用环境变量方法(请参阅 setup-java 4),这样您就不会将令牌存储在文件中。

【讨论】:

【解决方案2】:

如上所述,您需要对 GitHub Packages 进行身份验证。

ext {
  GITHUB_TOKEN = System.getenv("GITHUB_TOKEN")
}

maven {
  url "https://maven.pkg.github.com/paulschwarz/spring-dotenv"
  credentials {
    username GITHUB_USER
    password GITHUB_TOKEN
  }
}

其中 GITHUB_USER 定义在您的 gradle.properties 中,而 GITHUB_TOKEN 定义为环境变量。 GITHUB_TOKEN 在您的 GitHub Actions 工作流文件中可用 ${{ secrets.GITHUB_TOKEN }}

在本地运行时必须自己定义。

【讨论】:

    【解决方案3】:

    就我而言,我使用的是 Maven。经过研究,最终我需要生成一个 GitHub 令牌,而不是使用普通的 GitHub 用户登录密码。

    【讨论】:

      猜你喜欢
      • 2021-01-18
      • 2023-02-15
      • 2019-12-04
      • 1970-01-01
      • 1970-01-01
      • 2020-03-17
      • 1970-01-01
      • 2019-06-07
      • 1970-01-01
      相关资源
      最近更新 更多