Почему не работает приложение ZIO с мельницей?

Я установил простое приложение ZIO от zio.dev.

val myAppLogic =
    for {
      _    <- putStrLn("Hello! What is your name?")
      name <- getStrLn
      _    <- putStrLn(s"Hello, ${name}, welcome to ZIO!")
    } yield ()

При работе в / с Intellij он работает как положено.

Однако запустить его с мельницей это не так.

nbszmbp012:zio-scala-camunda-bot mpa$ mill server.run
[27/37] server.compile 
[info] Compiling 1 Scala source to /Users/mpa/dev/Github/pme123/zio-scala-camunda-bot/out/server/compile/dest/classes ...
[info] Done compiling.
[37/37] server.run 
Hello! What is your name?
Peter

name <- getStrLn не выполняется.

Здесь build.sc

import mill._, scalalib._

object server extends ScalaModule {
  def scalaVersion = "2.12.8"
  def ivyDeps = Agg(
    ivy"dev.zio::zio:1.0.0-RC10-1",
    ivy"com.bot4s::telegram-core:4.3.0-RC1"
  )
}

Я что-то пропустил?

1 ответ

Решение

Мельница работает по умолчанию в режиме клиент-сервер. Одним из последствий этого является то, что задачи сборки не могут использовать поток ввода.

Ваш приведенный пример необходимо прочитать из стандартного ввода процесса. Таким образом, вы должны явно указать Mill работать в интерактивном режиме с --interactive (или короткий -i).

$ mill -i server.run
[27/37] server.compile 
[info] Compiling 1 Scala source to /tmp/zio-q/out/server/compile/dest/classes ...
[info] Done compiling.
[37/37] server.run 
Hello! What is your name?
Peter
Hello, Peter, welcome to ZIO!

Когда вызывается с дополнительным -i (перед именем задачи) приложение ZIO правильно читает из STDIN и печатает приветствие.

Другие вопросы по тегам