我上传了一个 Maven 人工制品到 GitHub Package Registry (Beta)并希望将其添加为 maven 依赖项。我已经在 Regestry-Beta并为我的样本激活它 HalloMaven项目。还有 mvn deploy
成功了,所以神器是公众号在这里可用:
https://github.com/TobseF/HelloMaven/packages
但是如何将其包含为 Maven 依赖项?
我试图用这个 pom.xml
将它添加到一个新的示例项目中:
<groupId>de.tfr.test</groupId>
<artifactId>maven-repo-test</artifactId>
<version>1.0-SNAPSHOT</version>
<repositories>
<repository>
<id>github</id>
<name>GitHub TobseF Apache Maven Packages</name>
<url>https://github.com/TobseF/HelloMaven/packages</url>
<!-- also tried:
<url>https://maven.pkg.github.com/HelloMaven/</url> -->
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>github.tobsef</groupId>
<artifactId>hello-maven</artifactId>
<version>1.2.1</version>
</dependency>
</dependencies>
但是无法解决依赖关系。奇怪的是
artifactId
是 github.tobsef.hello-maven
,这与 hello-maven
不匹配在 pom.xml 中指定。但我不知道为什么 github.tobsef
被预先添加,如果存储库 url 正确。官方GitHub Configuring Apache Maven for use with GitHub Package Registry仅显示如何使用凭据推送它。但是我的 repo 是公开的,不需要身份验证。
HalloMaven 示例的设置:
settings.xml
<profiles>
<profile>
<id>github</id>
<repositories>
<repository>
<id>github</id>
<name>GitHub TobseF Apache Maven Packages</name>
<url>https://maven.pkg.github.com/TobseF</url>
</repository>
</repositories>
</profile>
</profiles>
<servers>
<server>
<id>github</id>
<username>${env.GITHUB_USERNAME}</username>
<password>${env.GITHUB_TOKEN}</password>
</server>
</servers>
pom.xml
<groupId>github.tobsef</groupId>
<artifactId>hello-maven</artifactId>
<version>1.2.1</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.1</version>
</plugin>
</plugins>
</build>
<properties>
<github.global.server>github</github.global.server>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>11</java.version>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<distributionManagement>
<repository>
<id>github</id>
<name>GitHub TobseF Apache Maven Packages</name>
<url>https://maven.pkg.github.com/TobseF/HelloMaven</url>
</repository>
</distributionManagement>
deploy.yml
name: Maven Deploy
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Maven build
run: mvn --file pom.xml package
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Deploy to Github Package Registry
env:
GITHUB_USERNAME: ${{ secrets.GITHUB_USERNAME }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: mvn --settings settings.xml --file pom.xml deploy
结果是 Could not find artifact github.tobsef:hello-maven:pom:1.2.1 in github (https://github.com/TobseF/HelloMaven/packages)
.任何想法如何设置部署以部署正确的 Artifact 以及如何将其添加为依赖项?
最佳答案
好的 ✅,我找到了如何以正确的方式配置它。
您可以看到一个带有工作 GitHub Actions 的示例项目。 CI 和 GitHub Package Registry这里:
👉 HelloMaven
要查看如何包含依赖项,请检查:
👉 GitHub-plugin-registry-example Template
诀窍是在全局 maven settings.xml
中向 GitHub API 添加身份验证.
<servers>
<server>
<id>github</id>
<username>YOUR_USERNAME</username>
<password>YOUR_AUTH_TOKEN</password>
</server>
</servers>
更换
YOUR_USERNAME
使用您的 GitHub 登录名。更换
YOUR_AUTH_TOKEN
使用生成的 GitHub 个人访问 token :GitHub > 设置 > 开发人员设置 > 个人访问 token > 生成新 token :
token 至少需要
read:packages
范围。否则你会得到一个
Not authorized
异常(exception)。尚不清楚读取包也需要此身份验证。特别是因为该 jar 无需在包页面上进行任何登录即可使用:
https://github.com/TobseF/HelloMaven/packages
所以它有点讨厌,因为我们必须添加
<server><id>github</id>...
并希望其他人也提供repository
与 github
ID。否则,我们必须为每个 github 依赖项添加服务器配置。请记住,每个 GitHub 存储库都是其自己的 Maven 存储库。所以没有像 maven central 那样的全局注册表。每个依赖都必须提供自己的
repository
链接声明。但是结合 GitHub Actions CI,这是一个非常好的替代方案,无需任何第三方插件。
关于maven - 如何从 GitHub 包注册表(测试版)访问 maven 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58438367/