【发布时间】:2020-02-08 08:15:08
【问题描述】:
我的一个项目依赖项位于一个私人 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,因此我不必在我的公共存储库中公开这些值,而是为了能够直接从我的公共存储库构建。构建开始时,您可以看到变量已导出:
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
【问题讨论】:
-
该属性应为
System.env.bintrayUsername。使用 elvis 运算符将返回错误,因为访问未知属性会引发异常,而不是简单地返回 null。如果您想有条件地将值解析为项目属性与环境变量,则必须执行hasProperty('bintrayUsername') ? bintrayUsername : System.env.bintrayUsername之类的操作。 -
嗨@mark,我试过这个(删除美元符号)但同样的构建失败。我没有按照您在评论第二部分中所说的话 - 我确实有条件地检查(除非我误解了)。
-
看看你上面的例子,我想你可能只是缺少引号。请注意,
hasProperty()采用String参数。 -
如果您添加您的评论作为答案,我会接受! +1,如果您还可以建议一种避免此错误的方法,或者建议如何以一种合乎逻辑的方式自己调试此错误,我将不可避免地忘记
hasProperty()将来需要一个字符串。
标签: gradle environment-variables travis-ci