3

我有一个 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 正常访问这个依赖项?我的图书馆在公共回购中。

PS 请不要建议使用 Jitpack,因为我想在没有任何额外资源的情况下获得干净的解决方案。

4

3 回答 3

4

答案似乎是“你不能”。请参阅GitHub 工作人员的评论

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

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

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

否则,选项可能是:

  • 创建具有读取权限的个人访问令牌,并与全世界共享。
  • 使用此处描述的解决方法
  • 发布到 Maven Central(但这是一个痛苦的世界)
于 2020-10-20T11:11:17.650 回答
1

目前,您不能。这里有一个关于这个功能请求的持续讨论。您可以在该讨论线程中找到多种解决方法,并发表您的意见。

于 2021-02-22T12:20:14.363 回答
0

接受的答案不再有效

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

  1. 仅使用 read:packages 范围创建 PAT
  2. 执行 docker run 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。在这种情况下,最好创建一个机器用户。

于 2021-04-01T14:43:23.453 回答