我的一个项目依赖项位于私有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'
}
}
}
在特拉维斯,我使用secure variables所以我不必在我的公共回购中公开这些价值观,但目的是能够直接从我的公共回购中建立。构建开始时,您可以看到变量已导出:
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
答案 0 :(得分:5)
该错误是您的三元语句尝试评估bintrayUsername
作为条件的一部分的结果。
hasProperty()
方法采用String
参数,因此您应使用hasProperty('bintrayUsername')
,而不是hasProperty(bintrayUsername)
。执行后者将尝试评估可能不存在的属性,从而导致MissingPropertyException
。
只需记住,尝试评估任何不存在的符号通常会产生MissingPropertyException
。
答案 1 :(得分:0)
在下面的示例中,通过从环境(即Travis放置安全变量的位置)中获取值来定义项目属性(而不是局部变量)(如果未定义)。
project.ext {
if (! project.hasProperty('some_prop')) {
some_prop = System.getenv('some_prop')
}
}
如果您从未将其设置为属性(不使用gradle.properties文件),并且始终希望从环境中进行设置,则只需删除IF部分。 :)
注意:我想要一个项目属性,以便可以在本地和CI中使用它在我的spring-boot YAML文件中设置值。