如何将公共 GitHub 仓库用作 Maven 依赖
Source: Dev.to
Introduction
Apache Maven 是大多数 Java 项目的核心,而 GitHub Packages 提供了一种方便的方式来托管和分发 Maven 构件。即使你的仓库是公开的,也需要完成一些重要步骤才能让一切顺畅运行。
GitHub Packages 允许你:
- 在源码旁边托管 Maven 构件
- 控制对构件的访问
- 将依赖保持在与你的仓库相近的位置
- 与 GitHub Actions 无缝集成
Note: GitHub Packages 即使是公开的 Maven 包也需要身份验证。
Prerequisites
- 一个 GitHub 账户
- 一个发布 Maven 包的公开仓库
- 本地已安装 Maven
- 对
pom.xml有基本了解
Step 1 – Create a GitHub Personal Access Token (PAT)
GitHub Packages 只支持 classic 个人访问令牌。
| Scope | Purpose |
|---|---|
read:packages | 下载包所必需 |
write:packages | 如果你还想发布包,则必需 |
请妥善保管此令牌——你将在 Maven 中将其用作密码。
Configure Maven Credentials (settings.xml)
Maven 从 ~/.m2/settings.xml 读取凭据。创建或编辑该文件,内容如下:
<servers>
<server>
<id>github</id>
<username>YOUR_GITHUB_USERNAME</username>
<password>YOUR_PERSONAL_ACCESS_TOKEN</password>
</server>
</servers>
<id>值(github)很重要;Maven 会将此 ID 与pom.xml中的仓库定义匹配。
Add the GitHub Packages Repository to pom.xml
<repositories>
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/OWNER/REPOSITORY</url>
</repository>
</repositories>
Example
<url>https://maven.pkg.github.com/mewan/my-public-repo</url>
Important: 仓库所有者名称必须使用小写,即使实际用户名中包含大写字母。
如果需要从同一 GitHub 用户或组织消费多个包,可以使用通配符:
<url>https://maven.pkg.github.com/OWNER/*</url>
Declare the Dependency
像对待任何 Maven 构件一样,将依赖添加到 pom.xml 中:
<dependency>
<groupId>com.example</groupId>
<artifactId>my-library</artifactId>
<version>1.0.0</version>
</dependency>
请确保:
- 包的版本已在 GitHub Packages 中存在。
artifactId为小写(GitHub 强制使用小写)。
像往常一样运行 Maven:
mvn clean install
如果身份验证和配置正确,Maven 将从 GitHub Packages 下载该包并将其纳入构建。
Common Issues
| Issue | Description |
|---|---|
| Assuming public packages don’t need authentication | 所有包都需要 PAT。 |
Mismatched <id> values between settings.xml and pom.xml | ID 必须完全一致。 |
Using uppercase letters in artifactId | GitHub 强制使用小写的 artifactId。 |
| Incorrect GitHub Packages URL | 确保 URL 符合 https://maven.pkg.github.com/OWNER/REPOSITORY 的格式。 |
仔细检查这些细节可以节省大量时间。
Conclusion
将 GitHub Packages 作为 Maven 注册表是一种强大的依赖管理方式,尤其是当你的代码已经托管在 GitHub 上时。虽然公开包也需要身份验证可能让人感到意外,但配置完成后工作流会非常顺畅可靠。如果你已经在使用 GitHub Actions,这套设置也能很好地融入 CI/CD 流水线。
Happy coding! 🚀