如果存储库凭据是硬编码的,则它们可以工作,但如果它们来自 gradle.properties,则不行

Thu*_*rge 4 artifactory gradle

问题

我正在使用 Gradle 并拥有我的存储库配置,这需要凭据。当我对用户名和密码进行硬编码时,一切正常。当我尝试将这些相同的凭据存储在gradle.properties其中时,却没有。

背景

我的文件中的存储库声明build.gradle基本上如下所示:

repositories {
    maven {
        url 'https://artifactory.example.com/libs/'
        credentials {
            username "myUsername"
            password "myPassword"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

一切都很好,我可以连接到我的存储库。

什么不起作用

正如您在上面看到的,用户名和密码是硬编码的。我想使其可配置,因此我按照此问题中的建议将以下属性添加到gradle.properties.

storedUsername = "myUsername"
storedPassword = "myPassword"
Run Code Online (Sandbox Code Playgroud)

然后我修改该build.gradle文件以引用这些属性:

repositories {
    maven {
        url 'https://artifactory.example.com/libs/'
        credentials {
            username project.storedUsername
            password project.storedPassword 
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我突然无法连接到我的存储库。当我检查服务器(Artifactory)日志时,我被告知无名用户的访问被拒绝。

这两个文件作为同级文件都位于根目录中。我已添加println "Username: ${project.repoUsername}"到该repositories{}块以及configurations {}dependencies{}块。它们都正确地返回了它们应该返回的值。

我怀疑这可能是一个范围问题,但我无法弄清楚它在哪里。我该怎么做才能将存储库放在外部文件中并将凭据放在 中gradle.properties

Thu*_*rge 7

配置是正确的,但问题出在gradle.properties. 目前是这样配置的:

storedUsername = "myUsername"
storedPassword = "myPassword"
Run Code Online (Sandbox Code Playgroud)

问题出在引号上。您不必将等号右侧的值作为字符串括起来,因此引号将被视为文字。换句话说,您发送到服务器的用户名不是myUsername而是"myUsername",这可能在服务器上不存在。

删除引号将解决此问题:

storedUsername = myUsername
storedPassword = myPassword
Run Code Online (Sandbox Code Playgroud)