当前位置: 首页 > 知识库问答 >
问题:

如何从Github Actions工作流上的Github包访问Maven依赖项?

牧璞
2023-03-14

我的构建通过直接在pom上使用用户PAT(个人访问令牌)在本地工作。xml

<repository>
    <id>github</id>
    <name>GitHub Packages</name>
    <url>https://[USER]:[PAT]@maven.pkg.github.com/myaccount/myrepo</url>
</repository>

从github下载:https://[USER]:[PAT]@maven。包装。github。com/myaccount/myrepo/org/springframework/flex/springflexcore/1.6。1.BUILD-SNAPSHOT/maven-metadata。xml(796b,592b/s)

我没有设置。xml已配置。

然而,它打破了Github操作的工作流程:

警告:无法传输元数据组织。springframework。弹性:Spring弹性芯:1.6。1.BUILD-SNAPSHOT/maven-metadata。xml from/to github(***maven.pkg.github.com/myaccount/myrepo):的身份验证失败https://maven.pkg.github.com/myaccount/myrepo/org/springframework/flex/spring-flex-core/1.6.1.BUILD-SNAPSHOT/maven-metadata.xml401未经授权

无法在组织上收集依赖项。springframework。flex:springflex核心:jar:1.6。1.BUILD-SNAPSHOT:无法读取组织的工件描述符。springframework。flex:springflex核心:jar:1.6。1.构建快照

我的工作流程如下:

steps:
      - uses: actions/checkout@v2
      - name: Set up JDK 1.8
        uses: actions/setup-java@v1
        with:
          java-version: 1.8
      - name: Cache Maven packages
        uses: actions/cache@v2
        with:
          path: ~/.m2
          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
          restore-keys: ${{ runner.os }}-m2
      - name: Build with Maven
        run: mvn -B package --file dev/server/pom.xml

为什么它打破了Github工作流?


共有2个答案

尚安平
2023-03-14

您需要使用GITHUB_令牌进行操作。请看这里:https://docs.github.com/en/packages/guides/configuring-apache-maven-for-use-with-github-packages#authenticating-到github包

要使用GitHub操作工作流进行身份验证:对于包注册中心(PACKAGE-REGISTRY.pkg.github.com),可以使用GITHUB_TOKEN。

name: Java CI with Maven

on:
  push:
    branches: [ maven ]

jobs:
  build:

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
  uses: actions/setup-java@v1
  with:
    java-version: 1.8
- name: Build core with Maven

...

- name: Publish package core
  run: mvn --batch-mode deploy --file myproject.core/pom.xml
  env:
       GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
都才俊
2023-03-14

基于你的问题,我想:

  • 您在GitHub包中部署了maven项目,我们称之为library

如果您的甚至是一个公共包,不幸的是,目前GitHub不支持对公共包从maven进行未经授权的访问。因此,你应该这样做:

转到应用程序存储库的设置部分,在机密小节中创建两个名为用户名的环境机密,该值包含您的GitHub用户名(或包所有者的用户名);和ACCESS\u TOKEN指向在上一步中创建的PAT TOKEN的值。

现在,在app存储库中创建一个mavensettings.xml,例如,您可以在您的workflow.yml文件旁边创建它。

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    <activeProfiles>
        <activeProfile>github</activeProfile>
    </activeProfiles>
    <profiles>
        <profile>
            <id>github</id>
            <repositories>
                <repository>
                    <id>central</id>
                    <url>https://repo1.maven.org/maven2</url>
                </repository>
                <repository>
                    <id>github</id>
                    <url>https://maven.pkg.github.com/owner_username/package_name</url>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                    <releases>
                        <enabled>true</enabled>
                  </releases>
                </repository>
            </repositories>
        </profile>
    </profiles>

    <servers>
        <server>
            <id>github</id>
            <username>${env.USER_NAME}</username>
           <password>${env.ACCESS_TOKEN}</password>
        </server>
    </servers>

</settings>
name: Java CI with Maven

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up JDK 8
      uses: actions/setup-java@v2
      with:
        java-version: '8'
        distribution: 'adopt'
        
    - name: Build with Maven
      run: mvn -s $GITHUB_WORKSPACE/.github/workflows/maven-settings.xml -B package --file pom.xml 
      env:
        USER_NAME: ${{ secrets.USER_NAME }}
        ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}

 类似资料:
  • 如何从其 GitHub 存储库(该库使用 Maven 作为构建系统)添加 Java 库作为依赖项添加到我的 Maven 项目中?我可以在不下载和编译库的情况下执行此操作吗?

  • 我将一个maven工件上传到GitHub包注册表(Beta版),并希望将其添加为maven依赖项。我已经在Regestry测试版中,并为我的示例HalloMaven项目激活了它。此外,也很成功,因此该工件在此处是公开的:https://github.com/TobseF/HelloMaven/packages 但如何将其作为maven依赖项包含? 我试图用这个: 但这种依赖性无法解决。奇怪的是,是

  • 我有一个核心项目,处理常见问题并应用方面,称为“common”。服务项目将此核心项目用于常见流程。 我必须在“通用”中管理异常处理,并且我必须从通用的属性文件中读取消息。但是服务也可以有自定义消息。 所以我把一条消息放在共同点上 } 共同点是,我有common-messages.properties 允许将服务命名为service\u 1,该服务依赖于Common。 Service\u 1还有Se

  • 我正在尝试使用Maven作为构建工具,为一个简单的Spring启动应用程序编写github操作管道。构建和验证成功,但将Jar部署到Github注册表失败,出现错误: 这是我的pom。xml 这是我创建的工作流文件: 我还尝试将服务器标记settings.xml,在maven部署阶段将其作为参数传递,但同样的错误也失败了。

  • 我的pom.xml如下所示: 有人能帮我吗?

  • 在项目A中,我有POJO和DAO。在项目B中,所有的业务规则、控制器、sping配置等等。 我已经按照这里的建议成功地将项目A链接到B。 src/main/webapp/web-inf/spring/smartquality-datasource.xml是: src/main/webapp/web-inf/spring/smartqualite-security.xml是: serc/main/w