【问题标题】:How can a mill task update environment variables so that later running tasks will see the updated value?Mill 任务如何更新环境变量,以便以后运行的任务可以看到更新后的值?
【发布时间】:2021-10-30 11:19:19
【问题描述】:

据说在mill v0.9.9 Task Context API documentation

Mill 保留一个长寿命的 JVM 服务器以避免支付成本 循环类加载。因此,在一个 任务可能不会产生最新的环境变量,因为它会 在服务器启动时初始化,而不是在客户端时初始化 执行。为了规避这种情况,mill 的客户发送环境 变量到服务器,因为它看到它们,服务器使它们 通过 Ctx API 作为 Map[String, String] 可用。

所以读取最新的环境变量很简单:

def envVar = T.input { T.ctx.env.get("ENV_VAR") }

但是一个任务如何做到这一点:“mill 的客户端将环境变量发送到服务器”,以便下一个运行的任务将看到更新的环境变量?

【问题讨论】:

    标签: scala build-tools mill


    【解决方案1】:

    几乎都说了。但是更清楚一点:每次运行mill命令时都会启动mill客户端,因此它也可以看到当前的操作系统环境变量。正是这个客户端在执行任务图之前捕获这些变量并将它们发送到已经运行的 Mill 服务器。

    此外,为了实现这一点,必须使用上下文 API 通过T.ctx.env 访问系统环境变量。由于我的 Mill 提供了此上下文,因此 Mill 服务器可以访问最新的环境变量。相反,如果您使用 Javas System.getenv API,您可能会看到可能已过时的变量(恰好是服务器启动时当前的变量)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-12
      相关资源
      最近更新 更多