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

标签 scala sbt

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

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

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

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

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

额外的:
在运行 sbt compile 之前,我在 shell 中获取环境变量。

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

导致禁止的 url 错误。

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

更新:
以下返回正确的值
eval scala.sys.env("ARTIFACTORY_USERNAME")

但是当我将它添加到我的脚本中时
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 中明确设置凭据,它就可以工作。

最佳答案

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

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

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

要将其转换为字符串,您需要进行匹配或简单地使用
sys.env.get("USERNAME").get
sys.env.get("USERNAME").getOrElse("some default value")

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

关于scala - 如何在 build.sbt 中使用环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43660137/

相关文章:

scala - 关于 Scala 的赋值和 setter 方法

java - Play Framework 2.5 JavaAsync 抛出 CompletionException

scala - Unresolved 依赖 org.scala-lang :scala3-library_3. 0.0 :3. 0

sbt - 如何在scalajs项目中导入 `%%%`中的 `Build.scala`?

scala - 为什么 Scala 找不到参数 scala.slick.session.Session 的隐式值?

Scala:使用 Array[Double] 中的初始值是否安全?

scala - sbt 总是在 CI 中重新编译整个项目,即使有缓存?

playframework - 如何使用 sbt/play 2.0 为 Dart 定义一个外部 "builder tool"?

scala - Scala 中的柯里化(Currying)函数背后的基本原理是什么?

scala - 我可以从 Scala 中的父类(super class)继承访问修饰符吗?