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

时间:2017-05-24 16:00:34

标签: gradle artifactory

问题

我正在使用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{}块。他们都正确地返回了他们应该的值。

我怀疑这可能是一个范围问题,但我无法弄清楚它在哪里。如何在外部文件和gradle.properties中的凭据中使用这两个存储库?

1 个答案:

答案 0 :(得分:2)

配置正确,但问题出在gradle.properties。它目前以这种方式配置:

storedUsername = "myUsername"
storedPassword = "myPassword"

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

删除引号将解决此问题:

storedUsername = myUsername
storedPassword = myPassword