如果存储库凭据是硬编码的,则它们有效,但如果它们来自 gradle.properties,则无效

Repository credentials work if they're hardcoded, but not if they're from gradle.properties

问题

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

背景

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

repositories {
    maven {
        url 'https://artifactory.example.com/libs/'
        credentials {
            username "myUsername"
            password "myPassword"
        }
    }
}

一切正常,我可以连接到我的存储库。

什么不起作用

正如您在上面看到的,用户名和密码是硬编码的。我想让它可配置,所以我按照 the advice in this question 添加以下属性到 gradle.properties.

storedUsername = "myUsername"
storedPassword = "myPassword"

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

repositories {
    maven {
        url 'https://artifactory.example.com/libs/'
        credentials {
            username project.storedUsername
            password project.storedPassword 
        }
    }
}

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

两个文件都在根目录中作为兄弟文件。我已经将 println "Username: ${project.repoUsername}" 添加到 repositories{} 块,以及 configurations {}dependencies{} 块。他们都正确 return 他们应该的价值观。

我怀疑这可能是范围界定问题,但我不知道它在哪里。我该怎么做才能同时拥有外部文件中的存储库和 gradle.properties 中的凭据?

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

storedUsername = "myUsername"
storedPassword = "myPassword"

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

删除引号将解决此问题:

storedUsername = myUsername
storedPassword = myPassword