Как получить доступ к Maven-зависимости из реестра пакетов GitHub (бета-версия) - PullRequest
1 голос
/ 17 октября 2019

Я загрузил артефакт maven в Реестр пакетов GitHub (бета) и хочу добавить его как зависимость maven. Я уже в Regestry-Beta и активировал его для моего проекта HalloMaven . Также mvn deploy был успешным, поэтому артефакт public доступен здесь: 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, указанному в поме. Но я понятия не имею, почему github.tobsef get добавлен и если URL-адрес хранилища верен.

Официальный GitHub Настройка Apache Maven для использования с GitHub Package Registry показывает только, как его подтолкнуть. с полномочиями. Но мой репозиторий общедоступен, аутентификация не требуется.

Настройка для 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).

Любая идея, как настроить развертывание для развертывания правильного артефакта и какдобавить это как зависимость?

1 Ответ

0 голосов
/ 18 октября 2019

OK ✅, я узнал, как правильно его настроить.

Вы можете увидеть пример проекта с работающими GitHub Actions CI и GitHub Package Registry здесь:
? HelloMaven
Чтобы увидеть, как можно включить зависимость, проверьте:
? GitHub-plugin-registry-example Template

Хитрость заключалась в том, чтобы добавить аутентификацию в GitHub API в глобальном maven settings.xml.

<servers>
    <server>
        <id>github</id>
        <username>YOUR_USERNAME</username>
        <password>YOUR_AUTH_TOKEN</password>
    </server>
</servers>

Заменить YOUR_USERNAME своим логином GitHub.
Заменить YOUR_AUTH_TOKENс созданным токеном личного доступа GitHub:
GitHub > Настройки > Настройки разработчика > Персональные токены доступа > Создатьновый токен :
токену требуется как минимум область действия read:packages. В противном случае вы получите исключение Not authorized.

Не было ясно, что этот auth также необходим для чтения пакета. Тем более, что баночка доступна без входа в систему на странице пакета: https://github.com/TobseF/HelloMaven/packages

Так что это немного неприятно, потому что мы должны добавить <server><id>github</id>... и надеяться, что другие также предоставят repositorygithub id. В противном случае мы должны добавить конфигурацию сервера для каждой зависимости github.

Имейте в виду, что каждое GitHub-репо является собственным репозиторием Maven. Таким образом, не существует глобального реестра, подобного Maven Central. Каждая зависимость должна предоставить свое собственное объявление ссылки repository.

Но в сочетании с CI GitHub Actions это очень хорошая альтернатива без сторонних плагинов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...