如何在 build.sbt 中使用环境变量? [英] How to use Environment Variables in build.sbt?

查看:56
本文介绍了如何在 build.sbt 中使用环境变量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在使用 built.sbt 时使用环境变量来传递我的 repo 凭据.

I would like to use environment variables to pass my repo credentials when using built.sbt.

我已经尝试过这样的事情,但没有找到细节.

I have tried things like this but the details arent picked up.

credentials += Credentials("Some Nexus Repository Manager", "my.artifact.repo.net", System.getenv("USERNAME"), System.getenv("PASSWORD"))

我也尝试过 ~/.sbt/下的凭证文件,但我不确定如何向其中添加环境变量.

I have also tried a credentials file under ~/.sbt/ but I'm not sure how to add environment variables to that.

如果我只是在凭据文件中正常输入我的用户名和密码,它就可以工作,所以我知道登录详细信息没问题.

If I just type my username and password normally in the credentials file it works so I know that the log in details are ok.

附加:在运行 sbt compile 之前,我在 shell 中获取环境变量.

Additional: I source the environment vars in a shell before running sbt compile.

运行

credentials += Credentials("Realm", "my.artifact.repo.net", sys.env("USERNAME"), sys.env("PASSWORD"))

导致出现禁止网址错误.

results in a forbidden url error.

我应该说我一直在尝试解决依赖项

I should say I'm stuck trying to resolve dependencies

更新:以下返回正确的值

UPDATE: The Following returns the correct value

eval scala.sys.env("ARTIFACTORY_USERNAME")

但是当我将它添加到我的脚本中时

But when I add this into my script

val username = scala.sys.env("ARTIFACTORY_USERNAME")
val password = scala.sys.env("ARTIFACTORY_PASSWORD")
credentials += Credentials("Artifactory Realm", "artifactory.link.io", username, password)

resolvers ++= Seq(
"Artifactory Snapshot" at "https://artifactory.link.io/art/libs-snapshot"
)

credentials += Credentials("Artifactory Realm", "my.artifact.repo.net", sys.env("ARTIFACTORY_USERNAME"), sys.env("ARTIFACTORY_PASSWORD"))   

我收到一个 FORBIDDEN URL 错误,这表明 Scala 部分运行正常,但由于某种原因,凭据仍然不正确.如果我在 build.sbt 中明确设置凭据,它就可以工作.

I get a FORBIDDEN URL error which suggests that the scala part runs ok but for some reason the credentials are still incorrect. If I explicitly set the credentials in the build.sbt it works.

推荐答案

您可以使用其他响应中提到的命令获取 env 变量,例如:

You can get env variables with the commands mentioned other responses like:

sys.env.get("USERNAME")
sys.env.get("PASSWORD")

但它们返回一个 Option[String] 类型的选项

but they return an option of type Option[String]

要将其转换为字符串,您需要进行匹配或简单地使用

To turn this into string you need to either do a match or simply use

sys.env.get("USERNAME").get
sys.env.get("USERNAME").getOrElse("some default value")

如果你需要设置一些默认值.警告!调用没有值的选项的 .get 会给你一个运行时错误.

if you need to set some default value. Warning! calling .get of an option that does not have value will give you a runtime error.

这篇关于如何在 build.sbt 中使用环境变量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆