Как читать переменные окружения в Scala

105

В Java переменные среды чтения выполняются с помощью System.getenv().

Есть ли способ сделать это в Scala?

Теги:
environment-variables

5 ответов

175
Лучший ответ

Так как Scala 2.9, вы можете использовать sys.env для того же эффекта:

scala> sys.env("HOME")
res0: String = /home/paradigmatic

Я считаю полезным использовать API Scala вместо Java. В настоящее время существует несколько проектов для компиляции Scala на другие платформы, чем JVM (.NET, javascript, native и т.д.). Сокращение зависимостей от Java API сделает ваш код более портативным.

  • 81
    Вероятно, лучше использовать sys.env.get("VARIABLE") который даст вам Option[String] а не выдавать ошибку, если эта переменная отсутствует.
  • 2
    @CristianVrabie Я бы тоже предпочел это, в большинстве случаев. Но sys.env - это просто Map . Вы можете любой метод подходит для вас.
96

Есть объект:

scala.util.Properties

у этого есть набор методов, которые могут быть использованы для получения информации об окружающей среде, включая

scala.util.Properties.envOrElse("HOME", "/myhome" )
  • 2
    Я также предпочел бы свойства. Он позволяет получить дополнительные данные и имеет имена для часто используемых свойств.
22

То же самое:

scala> System.getenv("HOME")
res0: java.lang.String = /Users/dhg
  • 2
    это работает, но это действительно не лучший вариант
  • 5
    ПРИМЕЧАНИЕ: не пропустите другие ответы - они драгоценные камни!
Показать ещё 2 комментария
3

Если используется библиотека конфигурации Lightbend (по умолчанию в Play2 и Akka), вы можете использовать

foo = "default value" foo = ${?VAR_NAME}

для переопределения foo, если существует переменная окружения VAR_NAME. Подробнее в https://github.com/typesafehub/config#optional-system-or-env-variable-overrides

0

Чтобы распечатать все переменные среды, вы можете использовать

System.getenv.forEach((name, value) => println(s"$name: $value"))

Ещё вопросы

Сообщество Overcoder
Наверх
Меню