11

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

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

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

现在我想将此包导入 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 中做错了什么?

4

3 回答 3

5

正如您所观察到的,GitHub 目前不支持未经授权的包访问(但计划在未来),正如他们的一位员工(20 年 5 月 27 日)所解释的那样:

我们的 Maven 服务现在不允许未经授权的访问。我们计划在未来提供此服务,但在此之前需要改进服务。

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

于 2020-08-17T08:17:34.757 回答
1

如上所述,您需要对 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 }}

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

于 2021-05-15T21:38:07.117 回答
0

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

于 2021-10-29T16:25:33.233 回答