maven - 如何从 GitHub 包注册表(测试版)访问 maven 依赖项

标签 maven github github-ci

我上传了一个 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>
但是无法解决依赖关系。
奇怪的是artifactIdgithub.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>...并希望其他人也提供repositorygithub ID。否则,我们必须为每个 github 依赖项添加服务器配置。

请记住,每个 GitHub 存储库都是其自己的 Maven 存储库。所以没有像 maven central 那样的全局注册表。每个依赖都必须提供自己的 repository链接声明。

但是结合 GitHub Actions CI,这是一个非常好的替代方案,无需任何第三方插件。

关于maven - 如何从 GitHub 包注册表(测试版)访问 maven 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58438367/

相关文章:

java - 解析测试报告异常

github - 通过GitHub API获取发布的验证对象

uwp - 在 GithubActions CI 中安装用于 UWP 开发的 SDK?

circleci - 仅当同一存储库中的文件添加新条目时,如何在 github 存储库中运行 CircleCI 作业?

java - OSGi noClassDefFound for java.nio.files.FileSystems$DefaultFileSystemHolder

maven - javax.validation.BootstrapConfiguration.getClockProviderClassName()Ljava/lang/String 没有这个方法

github - GitHub上的审阅者和受让人之间有什么区别?

github - 新的 GitHub 操作在空文件夹中运行

java - Maven 多配置文件部署在 WEB-INF/classes 中

javascript - XAMPP 不会更新 Web 源文件,直到它们在 Chrome 上提交给 Git