Доступ к частному реестру пакетов Github Maven с помощью Gradle
У меня есть частный репозиторий под пользователем X и именем репозитория Y:
Это проект Java, созданный с помощью Gradle.
Файл конфигурации Gradle настроен, как описано в официальной документации реестра пакетов Github, и я могу успешно опубликовать свой пакет:
https://help.github.com/en/articles/configuring-gradle-for-use-with-github-package-registry
publishing {
repositories {
maven {
name = "GitHubPackages"
url = uri("https://maven.pkg.github.com/X/Y")
credentials {
username = project.findProperty("gpr.user") ?: System.getenv("GITHUB_PACKAGE_REGISTRY_USER")
password = project.findProperty("gpr.key") ?: System.getenv("GITHUB_PACKAGE_REGISTRY_API_KEY")
}
}
}
publications {
github(MavenPublication) {
groupId = 'A'
artifactId = 'B'
version = '1.0.0'
from(components.java)
}
}
}
Как видно из приведенной выше конфигурации, я использовал соответственно A и B для groupId и artifactId. Версия 1.0.0.
Моя проблема связана с получением этой частной зависимости из другого проекта Gradle. Этот проект имеет следующую конфигурацию репозиториев:
repositories {
jcenter()
maven {
url = 'https://maven.pkg.github.com/X/Y'
credentials {
username System.getenv("GITHUB_PACKAGE_REGISTRY_USER")
password System.getenv("GITHUB_PACKAGE_REGISTRY_API_KEY")
}
}
}
и я добавил зависимость следующим образом:
implementation 'A:B:1.0.0'
но Gradle не смог разрешить зависимость.
URL-адрес репозитория (https://maven.pkg.github.com/X/Y) кажется нормальным, поскольку я могу открыть его в своем браузере с правильными учетными данными. К сожалению, я не могу просматривать иерархию.
Я заметил кое-что странное, когда открывал страницу сводки пакета на сайте Github. Также артефакт был опубликован под groupId A и artifactId B, он показывает следующие инструкции по установке:
<dependency>
<groupId>com.github.X/Y</groupId>
<artifactId>A.B</artifactId>
<version>1.0.0</version>
</dependency>
Я попытался изменить импорт зависимостей на:
implementation 'com.github.X/Y:A.B:1.0.0'
но это не могло быть решено снова.
Я также безуспешно пробовал следующий URL-адрес репозитория:
Как я могу использовать частный артефакт репозитория пакетов Github из другого проекта Gradle? Что не так с моей текущей настройкой?
1 ответ
Короче говоря
URL-адрес репозитория разрешения должен быть
https://maven.pkg.github.com/X/Y
(где X
является владельцем репозитория GitHub и Y
репозиторий GitHub, как обычно)
Обратите внимание, что этот репозиторий Maven нельзя просматривать. Вы можете загружать только те файлы, которые были опубликованы ранее, напримерhttps://maven.pkg.github.com/X/Y/A/B/1.0.0/B-1.0.0.pom
.
Документация GitHub Package Registry по общему признанию все еще немного сбивает с толку (и, возможно, даже ошибается).
Образец сборки
Я смог успешно загрузить зависимость со следующей конфигурацией сборки Gradle (и Gradle 5.6.2):
plugins {
id 'java'
}
repositories {
maven {
url = 'https://maven.pkg.github.com/X/Y'
credentials {
username = System.getenv("GITHUB_PACKAGE_REGISTRY_USER")
password = System.getenv("GITHUB_PACKAGE_REGISTRY_API_KEY")
}
}
}
dependencies {
implementation 'A:B:1.0.0'
}
task foo() {
doLast {
println configurations.runtimeClasspath.files
}
}
С этим автономным build.gradle
script, вы можете запустить следующее, чтобы увидеть загруженные файлы зависимостей на домашней странице пользователя Gradle:
GITHUB_PACKAGE_REGISTRY_USER=my_user_name GITHUB_PACKAGE_REGISTRY_API_KEY=my_private_token ./gradlew foo