Как получить доступ к зависимости от maven из реестра пакетов GitHub (бета)
Я загрузил артефакт maven в реестр пакетов GitHub (бета) и хочу добавить его как зависимость от 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
указано в пом. Но я понятия не имею, почемуgithub.tobsef
get, и если URL-адрес репозитория правильный.
Официальный GitHub Настройка Apache Maven для использования с реестром пакетов GitHub показывает только, как отправить его с учетными данными. Но мое репо общедоступное, аутентификация не требуется.
Настройка для примера 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 ответ
ОК…, я понял, как правильно его настроить.
Вы можете увидеть образец проекта с работающим CI GitHub Actions и реестром пакетов GitHub здесь:
HelloMaven
Чтобы увидеть, как можно включить зависимость, проверьте:
https://github.com/TobseF/github-plugin-registry-example
Хитрость заключалась в том, чтобы добавить аутентификацию в 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
исключение.
Было непонятно, нужна ли эта авторизация для чтения пакета. Тем более, что jar доступен без входа на странице пакета:https://github.com/TobseF/HelloMaven/packages
Это немного неприятно, потому что мы должны добавить <server><id>github</id>...
и надеюсь, что другие также предоставят repository
с github
Я бы. В противном случае мы должны добавить конфигурацию сервера для каждой зависимости github.
Имейте в виду, что каждое репо на GitHub - это собственное репозиторий maven. Таким образом, нет глобального реестра, такого как maven central. Каждая зависимость должна предоставлять свои собственныеrepository
объявление ссылки.
Но в сочетании с GitHub Actions CI это очень хорошая альтернатива без каких-либо сторонних плагинов.