我的项目依赖项之一位于私有(private)Bintray存储库上,该存储库需要用户名和密码才能访问。在本地,我在gradle.properties中设置了这些:

bintrayUsername=<myUserName>
bintrayPassword=<myPass>

这在本地工作,hasProperty(X)解析为true,并使用以下属性:
allprojects {
    repositories {
        jcenter()

        def mahBintrayUsername = hasProperty(bintrayUsername) ? bintrayUsername : System.getenv('bintrayUsername')
        def mahBintrayPassword = hasProperty(bintrayPassword) ? bintrayPassword : System.getenv('bintrayPassword')


        maven {
            credentials {
                username mahBintrayUsername
                password mahBintrayPassword
            }
            url 'http://dl.bintray.com/my-repo-org/maven-private'
        }
    }
}

在Travis上,我使用secure variables,因此我不必在公共(public)仓库中公开这些值,而是旨在能够直接从我的公共(public)仓库中构建。开始构建时,您可以看到已导出变量:
Setting environment variables from .travis.yml
$ export bintrayUsername=[secure]
$ export bintrayPassword=[secure]
$ export TERM=dumb

...

FAILURE: Build failed with an exception.
* Where:
Build file '/home/travis/build/ataulm/wutson/build.gradle' line: 15
* What went wrong:
A problem occurred evaluating root project 'wutson'.
> Could not find property 'bintrayUsername' on repository container.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED

我不确定如何在build.gradle中引用导出的环境变量,以便能够找到它们。

我检查了似乎不起作用的this answer(如上所述),以及导致相同构建失败的this comment

我尝试过的一系列提交都可以在这里看到,最新的是:https://github.com/ataulm/wutson/commit/9331b8d91b4acf11fd3e286ff8ba1a24ed527177

最佳答案

该错误是由于您的三元语句尝试评估bintrayUsername作为条件的一部分而导致的。
hasProperty()方法采用String参数,因此您应该使用hasProperty('bintrayUsername')而不是hasProperty(bintrayUsername)。进行后者将尝试评估可能不存在的属性,从而导致MissingPropertyException

只需记住,尝试评估不存在的任何符号通常会导致MissingPropertyException

07-26 07:00