7

我在用户X和存储库名称Y下有一个私有存储库:

https://github.com/X/Y

这是一个使用 Gradle 构建的 Java 项目。

Gradle 配置文件已按照官方Github 包注册表文档中的说明进行配置,我能够成功发布我的包:

https://help.github.com/en/articles/configuring-gradle-for-use-with-github-package-registry#publishing-a-package

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)
        }
    }
}

正如您在上面的配置中看到的,我分别使用AB作为 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,但没有成功:

我如何使用来自另一个 Gradle 项目的私有 Github 包存储库工件?我当前的设置有什么问题?

4

1 回答 1

11

简而言之

解析存储库 URL 需要是

https://maven.pkg.github.com/X/Y

(和往常一样,XGitHub存储库所有者和GitHub存储库在哪里)Y

请注意,无法浏览此 Maven 存储库。您只能从中下载之前发布过的确切文件,例如https://maven.pkg.github.com/X/Y/A/B/1.0.0/B-1.0.0.pom.

诚然,GitHub 包注册表文档仍然有些混乱(甚至可能是错误的)。

示例构建

我可以使用以下 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脚本,您可以运行以下命令在 Gradle 用户主目录中查看下载的依赖文件:

GITHUB_PACKAGE_REGISTRY_USER=my_user_name GITHUB_PACKAGE_REGISTRY_API_KEY=my_private_token ./gradlew foo

更多信息可以在GitHub 文档中找到。

于 2019-10-19T14:23:06.050 回答