在 Gradle 中调试 Github Packages 存储库连接

Ten*_*r04 3 java github gradle maven github-packages

我在 Github 上建立了一个私人项目,其中有一些 Maven 包。我可以在 Github 网站上浏览到它们。

按照此处的说明,我已设置 build.gradle 来声明存储库,如下所示:

repositories {
    mavenLocal()
    maven {
        url = "https://maven.pkg.github.com/myAccountName/myRepo"
        credentials {
            username = System.getenv("GITHUB_USERNAME")
            password = System.getenv("GITHUB_PACKAGES_TOKEN")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经使用我在具有权限的 Github 设置中创建的用户名和访问令牌设置了系统环境变量read:packages

我声明依赖关系的方式与之前将其安装到mavenLocal(). 但我从本地 Maven 存储库中删除了它,以便我可以测试它。

无法解决依赖关系。但 Gradle 发出的所有警告是:

无法解析“:android@debug/compileClasspath”的依赖关系:无法解析myGroup:myArtifact:1.0

没有记录有关 Maven 存储库之一无效的警告,但我认为这可能是问题,因为当包位于本地 Maven 存储库中时,它工作正常。可能是我指定的内容不正确,或者凭据不起作用。

我还尝试直接输入字符串用户名和令牌,而不是使用环境变量。该令牌是全新的且未过期。

如何确定与 Github Packages Maven 存储库的连接出了什么问题?有什么办法可以获得更有用的日志吗?或者您是否发现我的身份验证方式有问题?

Chr*_*iki 5

从你的问题中我可以看出,你的设置看起来是正确的。

\n

看来您\xe2\x80\x99只查看Android Studio提供的错误。Gradle\xe2\x80\x99s 自己的错误消息通常更有帮助,因此我\xe2\x80\x99d 建议查看这些错误消息。换句话说,我\xe2\x80\x99d 建议尝试从命令行构建项目,例如:

\n
./gradlew build\n
Run Code Online (Sandbox Code Playgroud)\n

根据错误的内容,您\xe2\x80\x99 将收到不同的错误消息。例如,如果您的密码/令牌错误,那么您\xe2\x80\x99将看到如下内容:

\n
> Could not resolve all files for configuration \':compileClasspath\'.\n   > Could not resolve com.example:my-lib:1.0.0.\n     Required by:\n         project :\n      > Could not resolve com.example:my-lib:1.0.0.\n         > Could not get resource \'https://maven.pkg.github.com/myAccountName/myRepo/com/example/my-lib/1.0.0/my-lib-1.0.0.pom\'.\n            > Could not GET \'https://maven.pkg.github.com/myAccountName/myRepo/com/example/my-lib/1.0.0/my-lib-1.0.0.pom\'. Received status code 401 from server: Unauthorized\n
Run Code Online (Sandbox Code Playgroud)\n

请注意Received status code 401 from server: Unauthorized最后的。

\n

但是,如果您的依赖项声明错误(组、模块名称或版本中的任何一个),那么您\xe2\x80\x99将收到如下错误:

\n
> Could not resolve all files for configuration \':compileClasspath\'.\n   > Could not find com.example:oops-wrong:1.0.0.\n     Searched in the following locations:\n       - file:/home/chriki/.m2/repository/com/example/oops-wrong/1.0.0/oops-wrong-1.0.0.pom\n       - https://maven.pkg.github.com/myAccountName/myRepo/com/example/oops-wrong/1.0.0/oops-wrong-1.0.0.pom\n     Required by:\n         project :\n
Run Code Online (Sandbox Code Playgroud)\n

当然,如果您之前没有(正确地)上传/发布了所需的包,那么您\xe2\x80\x99将得到相同的错误。您可以手动检查它是否存在于https://maven.pkg.github.com/myAccountName/myRepo/packages

\n

对于其他情况,可能还会有其他错误消息。例如,我记得见过 403。不幸的是,GitHub Packages 注册表似乎没有向 Gradle 提供足够的详细信息,因此它可以提供除上述两个错误之外的其他错误。即使我使用了错误的存储库,我仍然只会收到第二种错误:

\n
> Could not resolve all files for configuration \':compileClasspath\'.\n   > Could not find com.example:my-lib:1.0.0.\n     Searched in the following locations:\n       - file:/home/chriki/.m2/repository/com/example/my-lib/1.0.0/my-lib-1.0.0.pom\n       - https://maven.pkg.github.com/oops-wrong/com/example/my-lib/1.0.0/my-lib-1.0.0.pom\n     Required by:\n         project :\n
Run Code Online (Sandbox Code Playgroud)\n

更多发现:

\n
    \n
  • 对于凭证,GitHub 似乎只看 token。用户名\xe2\x80\x99t似乎并不重要。
  • \n
  • URL 中存储库的具体名称似乎无关紧要,只要它\xe2\x80\x99s 不为空即可。
  • \n
\n
\n

回到你的具体问题:Android Studio 错误消息的一部分似乎仍然直接来自 Gradle。它说\xe2\x80\x9c无法解析\xe2\x80\x9d而不是\xe2\x80\x9c无法找到\xe2\x80\x9d。所以它\xe2\x80\x99s可能是存储库连接的问题。如果您还没有\xe2\x80\x99t 将您的令牌用于其他任何用途,那么您可以在https://github.com/settings/tokens检查GitHub 是否认为它已被使用(例如,\xe2\x80\ x9c最近一周内使用\xe2\x80\x9d)。如果它显示 \xe2\x80\x9cNeverused\xe2\x80\x9d,那么你\xe2\x80\x99就会知道 Gradle 从未成功连接到 GitHub,你应该仔细检查使用过的令牌或尝试新的令牌。或者,您可以先尝试使用您的凭据wget

\n
wget --user myAccountName --password "$GITHUB_PACKAGES_TOKEN" \\\n    https://maven.pkg.github.com/myAccountName/myRepo/com/example/my-lib/1.0.0/my-lib-1.0.0.pom\n
Run Code Online (Sandbox Code Playgroud)\n