如何从 Maven 项目中引用 public GitHub 包

How to reference public GitHub packages from maven project

我有一个 GitHub 存储库,其中一个库发布到它自己的 GitHub 包 maven 存储库。我还有另一个项目,我想在其中引用这个库作为依赖项。

当我将以下配置添加到我的项目的 POM 文件中时,它不起作用。

<repositories>
 <repository>
  <id>github</id>
  <name>GitHub Packages</name>
  <url>https://maven.pkg.github.com/test-account/test-lib</url>
 </repository>
</repositories>

它需要我进行身份验证。我知道这是非常合乎逻辑的,因为它基本上不是源回购,而是底层的 Maven 回购。但是有没有办法让正常的 maven 访问这种依赖关系?我的图书馆在 public 仓库中。

P.S。请不要建议使用 Jitpack,因为我想要没有任何额外资源的干净解决方案。

答案似乎是“你不能”。见 this comment from a GitHub staff member:

Our Maven service doesn’t allow for unauthorized access right now. We plan to offer this in the future but need to improve the service a bit before that.

目前最简单的选择似乎是创建一个具有读取权限的个人访问令牌,并将其包含在 pom.xml<repository> 部分的 URL 中,就像这样:

<repository>
  <id>github</id>
  <name>GitHub Packages</name>
  <url>https://my-user:b96e7de7514e45c5@maven.pkg.github.com/my-user/my-repo</url>
</repository>

否则,选项可能是:

  • 创建具有读取权限的个人访问令牌,然后与全世界共享。
  • 使用解决方法described here
  • 发布到 Maven Central(但那是一个痛苦的世界)

目前,您不能。关于此功能请求的讨论正在进行 here。您可以在该讨论帖中找到多种解决方法,也可以发表您的意见。

已接受的答案不再有效

目前,如果在 public 存储库中应用该方法,GitGuardian 会自动撤销个人访问令牌 (PAT)。根据 GitHub staff 的建议,解决方案如下:

  1. 创建仅包含 read:packages 范围的 PAT
  2. 执行docker运行ghcr.io/jcansdale/gpr编码

这将输出以下内容:

$ docker run ghcr.io/jcansdale/gpr encode 0123456789abcsef
An encoded token can be included in a public repository without being automatically deleted by GitHub.

这些可以像这样用于各种包生态系统中:

A NuGet `nuget.config` file:
<packageSourceCredentials>
  <github>
    <add key="Username" value="PublicToken" />
    <add key="ClearTextPassword" value="&#48;123456789abcsef" />
  </github>
</packageSourceCredentials>

A Maven `pom.xml` file:
<repositories>
  <repository>
    <id>github-public</id>
    <url>https://public:&#48;123456789abcsef@maven.pkg.github.com/<OWNER>/*</url>
  </repository>
</repositories>

An npm `.npmrc` file:
@OWNER:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken="\u0030123456789abcsef"
You can use this snippet in you project’s configuration file.

请注意,如果您有权访问任何需要保护的私有包,则不应包含您自己的 read:packages PAT。在这种情况下最好创建一个机器用户。