如何从 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 的建议,解决方案如下:
- 创建仅包含 read:packages 范围的 PAT
- 执行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="0123456789abcsef" />
</github>
</packageSourceCredentials>
A Maven `pom.xml` file:
<repositories>
<repository>
<id>github-public</id>
<url>https://public:0123456789abcsef@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。在这种情况下最好创建一个机器用户。
我有一个 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 的建议,解决方案如下:
- 创建仅包含 read:packages 范围的 PAT
- 执行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="0123456789abcsef" />
</github>
</packageSourceCredentials>
A Maven `pom.xml` file:
<repositories>
<repository>
<id>github-public</id>
<url>https://public:0123456789abcsef@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。在这种情况下最好创建一个机器用户。