如何在build.sbt中使用环境变量?

Gle*_*lef 14 scala sbt

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

我尝试过这样的事情,但细节没有被提到.

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

我还尝试了〜/ .sbt /下的凭证文件,但我不知道如何添加环境变量.

如果我只是在凭证文件中正常输入我的用户名和密码,那么我就知道登录的详细信息是正常的.

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

运行

credentials += Credentials("Realm", "my.artifact.repo.net", sys.env("USERNAME"), sys.env("PASSWORD"))
Run Code Online (Sandbox Code Playgroud)

导致禁止的网址错误.

我应该说我试图解决依赖关系

更新:以下内容返回正确的值

eval scala.sys.env("ARTIFACTORY_USERNAME")
Run Code Online (Sandbox Code Playgroud)

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

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"
)
Run Code Online (Sandbox Code Playgroud)

要么

credentials += Credentials("Artifactory Realm", "my.artifact.repo.net", sys.env("ARTIFACTORY_USERNAME"), sys.env("ARTIFACTORY_PASSWORD"))   
Run Code Online (Sandbox Code Playgroud)

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

小智 12

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

sys.env.get("USERNAME")
sys.env.get("PASSWORD")
Run Code Online (Sandbox Code Playgroud)

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

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

sys.env.get("USERNAME").get
sys.env.get("USERNAME").getOrElse("some default value")
Run Code Online (Sandbox Code Playgroud)

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

  • 改用sys.env.getOrElse(“ USERNAME”,“一些默认值”)怎么样? (3认同)

Oli*_*ain 7

你可以在sbt中使用Scala中的任何东西,例如:

sys.env.get("PASSWORD")
Run Code Online (Sandbox Code Playgroud)

  • 找到:选项[字符串] 必需:字符串。我对 scala 没有太多经验,如何将其转换为字符串? (2认同)